更新状态超过 1 次后调用函数

Posted

技术标签:

【中文标题】更新状态超过 1 次后调用函数【英文标题】:Calling a function after updating the state more than 1 time 【发布时间】:2021-11-08 21:34:45 【问题描述】:

我正在状态中存储一些数据。我首先调用 1 个 API 并获取更新状态中的数据 3 次。数据更新后,我必须使用更新的状态数据调用另一个 API。我无法这样做。如果状态只更新一次,我会使用 useEffect。但是,这里它改变了 3 次。

const [data, setData] = useState(() => getDataInit());


const setDataKey = key => value =>
  setData(d => (
    ...d,
    [key]: value,
));

const postFn = () => 
  const response = await updateData( body: data );
  onSave(
    response,
    widget,
    wrapperId,
  );
;

const resetFn = () => 
  const defaultData = await getDefaultData(
    query:  id: data.default_id ,
  );
  setDataKey('quantity')(defaultData.quantity);
  setDataKey('name')(defaultData.name);
  setDataKey('amount')(defaultData.amount);
  postFn();
;

【问题讨论】:

【参考方案1】:

您可以更新为只呼叫一个setData。所以你可以添加useEffect来调用postFn

const resetFn = () => 
  const defaultData = await getDefaultData(
    query:  id: data.default_id ,
  );

  const newData = 
   quantity: defaultData.quantity,
   name: defaultData.name,
   amount: defaultData.amount,
  ;

  setData((d) => (
    ...d,
    ...newData,
  ));


useEffect(() => 
  postFn();
, [data]);

【讨论】:

以上是关于更新状态超过 1 次后调用函数的主要内容,如果未能解决你的问题,请参考以下文章

如何访问已调用 setState 的函数主体中的更新状态?

如何在调用更新后端状态的函数时从 python (fastapi) 发送服务器端事件

React - 每当更新反应上下文中的状态时如何调用函数?

使用React useContext hook进行分派调用后,反应状态不会更新

如何测试调用api的函数?

将状态更新从 C++ 中的函数发送到 C#