Ori*_*Ryo 6 javascript reactjs react-hooks use-effect
我是 React hooks 的新手,我不知道如何实现以下目标。假设我有state1
和state2
,并且我使用useEffect
钩子来调用asyncFn1
和更新state1
。
现在我想等待state1
更改并使用state1
值来调用asyncFn2
和更新state1
和state2
。这asnycFn1
应该asyncFn2
只被调用一次。
如果我只是用另一个useEffect
来调用asyncFn2
,我将无法获得该state1
值。我该如何解决这个问题?
const [state1, setState1] = useState(null);
const [state2, setState2] = useState(null);
const asyncFn1 = async() => {
// async call to get state 1 data
// setState1
}
const asyncFn2 = async(_state1) => {
// use state1 data to make async call to get state 2 data
// state2 data will be used to update both state1 and state2
}
useEffect(() => {
asyncFn1();
}, [])
Run Code Online (Sandbox Code Playgroud)
这里您需要的是一个 useEffect ,它state1
在 useEffect 依赖项数组中包含您的内容,因此只要您的state1
值发生变化就可以触发它,如下所示:
useEffect(() => {
state1 && asyncFn2()
}, [state1])
Run Code Online (Sandbox Code Playgroud)
如果您希望asyncFn2
在获取 state1 的数据后仅触发一次,您可以添加一个 ref 来检查何时调用:
const dataLoaded = useRef(false)
useEffect(() => {
if(state1 && !dataLoaded.current) {
asyncFn2()
}
}, [state1])
const asyncFn2 = async () => {
// Your logic here
// Set dataLoaded on true once you have updated what you need successfully
dataLoaded.current = true
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4488 次 |
最近记录: |