0

I'm trying to get the state of my hue lights using my API and based on this information render the page ( basically if my lamp is on I want my toggle switch on website to be already toggled once the page loads) Currently I'm trying pass data fetched from my API using async function to the useState()

Here is my code

const LightSwitch = (props) => {

  async function lightState(){
    const response = await httpGet('http://192.168.1.124/get_light_state/id/' + props.id);
    let data = await response
    return data;
  } 

  lightState().then(data => {
    console.log(data.Light);
  }
    )

    const [toggleSwitch, setToggleSwitch] = useState();

My API response is

{
  "Light": false
}

Here is my whole code for reference.

import React, { useState } from "react";
import { Switch } from "antd";
import "./LightSwitch.css";

async function httpGet (url){
  const response = await fetch(url,{method: 'GET'});
  const string = await response.text();
  const json = string === "" ? {} : JSON.parse(string);
  return json;
  
}
const LightSwitch = (props) => {

  async function lightState(){
    const response = await httpGet('http://192.168.1.124/get_light_state/id/' + props.id);
    let data = await response
    return data;
  } 

  lightState().then(data => {
    console.log(data.Light);
  }
    )

    const [toggleSwitch, setToggleSwitch] = useState();

  
  const onChangeSwitch = (checked) => {
    setToggleSwitch(!toggleSwitch);
    if (checked) {
      console.log(props.name + ' on');
      httpGet('http://192.168.1.124/turn_on/id/' + props.id);
    }else{
      console.log(props.name + ' off');
      httpGet('http://192.168.1.124/turn_off/id/'+ props.id);
    }

  };

  return (
    <div>
      <Switch checked={toggleSwitch} onChange={onChangeSwitch}></Switch>
    </div>
  );
};
export default LightSwitch;

  • 1
    You make an API request when your component mounts inside a `useEffect` call with an empty dependency array. After the data is loaded, you call the setter of your state variable (instead of returning it) –  Jun 07 '22 at 23:42
  • Check out this answer OP, this is an extremely common challenge: https://stackoverflow.com/questions/14220321/how-to-return-the-response-from-an-asynchronous-call/67648397#67648397 – ᴓᴓᴓ Jun 07 '22 at 23:46

0 Answers0