在 useEffect (React) 中获取未定义的值
Getting undefined value in useEffect (React)
以下函数获取用户的当前位置:
const getCurrentLocation = () => {
fetch("https://ipinfo.io/json?token=$TOKEN")
.then((response) => response.json())
.then((jsonResponse) => {
console.log(jsonResponse)
return jsonResponse;
});
};
useEffect(() => {
console.log(getCurrentLocation());
}, []);
登录 useEffect
显示 undefined
,它首先出现在控制台中,然后 jsonResponse
在控制台中显示下一个相应的对象。这是为什么?
getCurrentLocation
函数未返回任何内容。尝试将位置保存在状态中,以便您可以在需要时访问它:
const [currentLocation, setCurrentLocation] = useState(null);
const getCurrentLocation = () => {
fetch("https://ipinfo.io/json?token=$TOKEN")
.then((response) => response.json())
.then((jsonResponse) => {
setCurrentLocation(jsonResponse); // <- save the location in state
});
};
useEffect(() => {
getCurrentLocation();
}, []);
return <div>{currentLocation}</div>
如果您需要 useEffect
中的位置,您可以这样做:
useEffect(() => {
if (currentLocation !== null) {
// ...
}
}, [currentLocation])
getCurrentLocation
没有 return 任何东西,这就是为什么你有 undefined
.
此外,fetch
returns a Promise
,也就是异步,意思是你不会立即得到结果,必须传一个回调给then
才能得到结果可用时。
const getCurrentLocation = () => {
return fetch("https://ipinfo.io/json?token=$TOKEN")
.then(response => response.json());
};
useEffect(() => {
getCurrentLocation()
.then(location => console.log(location));
}, []);
你可以简单地使用async/await来获得响应,看看这个:
const getCurrentLocation = async () => {
const result = await fetch("https://ipinfo.io/json?token=$TOKEN");
return result.json();
};
const handleGetLocation = async () => {
const result = await getCurrentLocation();
console.log(result);
};
useEffect(() => {
handleGetLocation();
}, []);
以下函数获取用户的当前位置:
const getCurrentLocation = () => {
fetch("https://ipinfo.io/json?token=$TOKEN")
.then((response) => response.json())
.then((jsonResponse) => {
console.log(jsonResponse)
return jsonResponse;
});
};
useEffect(() => {
console.log(getCurrentLocation());
}, []);
登录 useEffect
显示 undefined
,它首先出现在控制台中,然后 jsonResponse
在控制台中显示下一个相应的对象。这是为什么?
getCurrentLocation
函数未返回任何内容。尝试将位置保存在状态中,以便您可以在需要时访问它:
const [currentLocation, setCurrentLocation] = useState(null);
const getCurrentLocation = () => {
fetch("https://ipinfo.io/json?token=$TOKEN")
.then((response) => response.json())
.then((jsonResponse) => {
setCurrentLocation(jsonResponse); // <- save the location in state
});
};
useEffect(() => {
getCurrentLocation();
}, []);
return <div>{currentLocation}</div>
如果您需要 useEffect
中的位置,您可以这样做:
useEffect(() => {
if (currentLocation !== null) {
// ...
}
}, [currentLocation])
getCurrentLocation
没有 return 任何东西,这就是为什么你有 undefined
.
此外,fetch
returns a Promise
,也就是异步,意思是你不会立即得到结果,必须传一个回调给then
才能得到结果可用时。
const getCurrentLocation = () => {
return fetch("https://ipinfo.io/json?token=$TOKEN")
.then(response => response.json());
};
useEffect(() => {
getCurrentLocation()
.then(location => console.log(location));
}, []);
你可以简单地使用async/await来获得响应,看看这个:
const getCurrentLocation = async () => {
const result = await fetch("https://ipinfo.io/json?token=$TOKEN");
return result.json();
};
const handleGetLocation = async () => {
const result = await getCurrentLocation();
console.log(result);
};
useEffect(() => {
handleGetLocation();
}, []);