在反应中,对象似乎是使用提取的空对象

时间:2020-08-08 09:15:14

标签: reactjs javascript-objects

如果我在函数内部使用变量而不是使用react状态对象,则会表现出怪异的提取效果。如果我删除了const响应.....和const数据....行的东西就很好了,但是如果我使用fetch函数并使用普通变量而不使用状态,那是行不通的。为什么呢?

Object is showing normal if i log it from inside the function

Object is also showing normal if i use const variable

Object is showing like an empty object if i log it from outside the function

但是此代码可以正常工作。.

   const [services, setServices] = useState([]);

   useEffect(() => {
    const API_URL = "http://localhost:8080/getServiceName/3";

    const loadData = async () => {
        const apiData = [];
        const response = await fetch(API_URL);
        const data = await response.json();

        data.services.map(service => (
            apiData.push(service.service_name)
        ));
        setServices(apiData);
    }
    loadData();
   }, [location])

请注意,我可以为const变量(代码中的const dummyLocation {和图像中的const apiData)添加更多的值!!!

1 个答案:

答案 0 :(得分:-1)

loadData();是异步的,所以如果这样做

loadData()
console.log(dummyLocation)

然后console.log会在loadData完成之前发生。您可能只想做

loadData().then(() => console.log(dummyLocation))

关于您为什么可以这样做的问题:

const apiData = [];
// ...
apiData.push(service.service_name)

原因是const并不意味着变量本身不能更改,而是永远不会重新分配变量-您不能这样做:

const apiData = [];
apiData = [service.service_name];

因为正在为其分配一个新数组。