Reactjs setCustomState中的calback函数不工作
我试图在setCustomState钩子中使用回调函数,我从API调用中设置状态值,然后获取此值并使用它进行更多API调用,问题是名为notTriggeredFunction,的函数从未被调用过,我不知道这里会出现什么问题 我的意见如下:Reactjs setCustomState中的calback函数不工作,reactjs,callback,react-hooks,Reactjs,Callback,React Hooks,我试图在setCustomState钩子中使用回调函数,我从API调用中设置状态值,然后获取此值并使用它进行更多API调用,问题是名为notTriggeredFunction,的函数从未被调用过,我不知道这里会出现什么问题 我的意见如下: const [record, setRecord] = useState([]) myFunction=()=>{ const ApiRes = await apicall() setRecord(ApiRes,
const [record, setRecord] = useState([])
myFunction=()=>{
const ApiRes = await apicall()
setRecord(ApiRes, () => {
const arrayData = notTriggeredFunction(record) //does not get called
if (arrayData.length > 0) {
Promise.all(arrayData.map(e => fetchCurrent(e))).then(res =>
setRecord(
record => [...res, ...record],
() => resolve()
)
)
} else setLoading(false, () => resolve())
})
}
我已经看过了文档和其他问题,但似乎我在这里遗漏了什么。
setRecord
状态更新程序函数只接受一个参数,要么是更新状态的值,要么是使用前一个状态并返回下一个状态值的函数。传递给它的任何额外参数都将被忽略
与基于类的组件的setState
回调相当的功能组件是更新状态,并使用依赖于状态的useffect
发出副作用。这与componentdiddupdate
同义
更新myFunction
回调中的record
状态,并使用一个依赖于record
状态更新的useffect
钩子来发布额外的副作用
const [record, setRecord] = useState([]);
myFunction = async () => {
const ApiRes = await apicall();
setRecord(ApiRes);
}
useEffect(() => {
const arrayData = shouldBeTriggeredFunction(record);
if (arrayData.length > 0) {
Promise.all(arrayData.map(e => fetchCurrent(e)))
.then(res => {
setRecord(record => [...res, ...record]);
});
} else {
setLoading(false);
}
}, [record]);
但是,如果效果更新其依赖项数组中的相同状态,则这将创建一个无限循环。您还必须添加一个附加的条件测试(该条件由您决定),或者使用一个附加的状态依赖项,如
doFetchCurrent
或类似于用作条件保护的东西,以便不渲染循环。setRecord
状态更新程序函数只接受一个参数,用于更新状态的值,或用于使用前一状态并返回下一状态值的函数。传递的任何额外参数都将被忽略。你想做什么?在记录
状态更新后调用该函数?谢谢你的解释,你做对了,我正在尝试确保状态更新,然后再进行以下逻辑,我想我可以找到一个解决方法,使用useEffect或类似的方法,但我只是想了解我做错了什么,再次感谢您的澄清