Reactjs setCustomState中的calback函数不工作

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,

我试图在setCustomState钩子中使用回调函数,我从API调用中设置状态值,然后获取此值并使用它进行更多API调用,问题是名为notTriggeredFunction的函数从未被调用过,我不知道这里会出现什么问题

我的意见如下:

  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或类似的方法,但我只是想了解我做错了什么,再次感谢您的澄清