带有钩子的 useEffect 中的 Promise 函数中的 setState?
setState inside a Promise function in a useEffect with hooks?
我正在尝试在 useEffect()
中的 Promise 函数中设置钩子的值,并能够将 returned 承诺值存储在 fruit
钩子中,所以我可以在 MyComponent()
的 return 函数中访问它
这是我到目前为止尝试过的:
const MyComponent = () => {
const [fruit, setFruit] = useState('')
useEffect(() => {
// my promise function that returns a string (a random fruit)
promiseFunction()
.then(value => setFruit(value))
}, [])
return <div>fruit ? fruit : Loading...</div>
}
到目前为止,我已经尝试了很多方法,但其中 none 行得通。
useEffect(() => {
promiseFunction()
.then(value => setFruit(() => value))
}, [])
useEffect(() => {
promiseFunction()
.then(value => setFruit((value) => { fruit = value }))
}, [])
之后,钩子的 returned 值仍然是空的。
没有错误消息或任何错误消息,我尝试使用另一个 useEffect 进行调试,它仍然 return 在控制台中。
如何获取 promise 函数的 returned 值并将其存储在 fruit
变量中?
第一个代码示例对我来说非常完美。我唯一担心的是该值没有正确地从函数本身 returned。
您是否尝试从 promiseFunction 中记录 return?编写此代码的另一种方法是使用一个可以在 useEffect 内部调用的函数,如下所示:
useEffect(() => {
async function loadFruitData() {
const promiseFunctionReturn = await promiseFunction()
console.log(promiseFunctionReturn)
setFruit(promiseFunctionReturn)
}
//Call the function
loadFruitData();
}, [])
这应该可以让您更好地了解正在发生的事情,而且我还发现它更具可读性。
但是请记住,如果您尝试 console.log() setFruit 之后的数据,它不会向您显示更新后的状态,这是因为 React 有一个队列来进行更新通过 useState,这让它看起来像一个异步更新。
我正在尝试在 useEffect()
中的 Promise 函数中设置钩子的值,并能够将 returned 承诺值存储在 fruit
钩子中,所以我可以在 MyComponent()
这是我到目前为止尝试过的:
const MyComponent = () => {
const [fruit, setFruit] = useState('')
useEffect(() => {
// my promise function that returns a string (a random fruit)
promiseFunction()
.then(value => setFruit(value))
}, [])
return <div>fruit ? fruit : Loading...</div>
}
到目前为止,我已经尝试了很多方法,但其中 none 行得通。
useEffect(() => {
promiseFunction()
.then(value => setFruit(() => value))
}, [])
useEffect(() => {
promiseFunction()
.then(value => setFruit((value) => { fruit = value }))
}, [])
之后,钩子的 returned 值仍然是空的。
没有错误消息或任何错误消息,我尝试使用另一个 useEffect 进行调试,它仍然 return 在控制台中。
如何获取 promise 函数的 returned 值并将其存储在 fruit
变量中?
第一个代码示例对我来说非常完美。我唯一担心的是该值没有正确地从函数本身 returned。
您是否尝试从 promiseFunction 中记录 return?编写此代码的另一种方法是使用一个可以在 useEffect 内部调用的函数,如下所示:
useEffect(() => {
async function loadFruitData() {
const promiseFunctionReturn = await promiseFunction()
console.log(promiseFunctionReturn)
setFruit(promiseFunctionReturn)
}
//Call the function
loadFruitData();
}, [])
这应该可以让您更好地了解正在发生的事情,而且我还发现它更具可读性。
但是请记住,如果您尝试 console.log() setFruit 之后的数据,它不会向您显示更新后的状态,这是因为 React 有一个队列来进行更新通过 useState,这让它看起来像一个异步更新。