当前位置: 首页 > 知识库问答 >
问题:

等待useState设置值​然后调用函数

邢寒
2023-03-14

我使用的是react native而不是expo,当尝试使用UseState设置值时,它不会立即设置,并且我无法获取值​​在另一个功能中。

const [gridData, setGridData] = useState([]);

useEffect(() => {
        getGridApi().then((response)=>{
            setGridData(response);
            pressed('Mon', 0);
        })
    
}, []);

const pressed = async (category, index) => {
    console.log(gridData); // empty
}

如何让它等待设置,然后调用函数pressed()

共有2个答案

鲁光霁
2023-03-14

Cioa,不幸的是,对于钩子,设置状态是异步的,并且您无法以这种方式获取最后一个值。但是您可以使用另一个useffecthook来检索状态变量的任何更改。

试试这个:

useEffect(() => {
   console.log(gridData);  // this shows the last value of gridData setted by the other useEffect
}, [gridData]);

但是请注意:每次gridData改变他的值时,我的worte都会被触发!

董良策
2023-03-14

您可以使用此软件包,也可以为此自定义挂钩。不幸的是,react不提供useState回调功能

例子:

从“带回调的使用状态”导入useStateWithCallback;

const App = () => {
  const [count, setCount] = useStateWithCallback(0, count => {
    if (count > 1) {
      console.log('Threshold of over 1 reached.');
    } else {
      console.log('No threshold reached.');
    }
  });
 
  return (
    <div>
      <p>{count}</p>
 
      <button type="button" onClick={() => setCount(count + 1)}>
        Increase
      </button>
    </div>
  );
};
 类似资料:
  • 到目前为止,我做到了: 我的Ajax1函数返回ajax对象。我的等待函数看起来像这样: 问题是第二个ajax请求函数(Ajax2)并没有等待等待函数!编辑:我也试过: 什么也没变。从jQuery文档: 在将多个延迟对象传递给jQuery.when的情况下,该方法将从新的“master”返回promise“延迟对象,跟踪已传递的所有延迟的聚合状态。当所有延迟被解决时,该方法将立即解决其主延迟,或者当

  • 我正在为以下问题而苦苦挣扎:我的javafx应用程序中有一个类似弹出窗口的东西,它应该阻止应用程序,直到用户输入一些。它不是一个单独的阶段,我可以在其中调用showAndWait(),然后返回阶段的输入。弹出窗口实现为窗格,该窗格放置在其他组件之上。现在我做这样的事情: 所以我希望pp.getInput()等待,直到用户按OK/CANCEL/APPLY/...按钮在我的弹出窗口中。在这种情况下,我

  • 问题内容: 我的document.ready()中有一些ajax调用 喜欢 : 我如何强制它等待,直到我们从ajax请求获得所有回叫之前不继续? 问题答案: 我根本不喜欢任何答案,最好的方法(自Jquery 1.5+起)是使用Deferred对象,这些是操纵异步调用的对象,可以解决: 这样,myFunc会在执行2个ajax调用之后执行,如果其中一个出错,则执行myFailure。 您可以在jque

  • 问题内容: 我已经审查了很多有关此类问题的答案,但现在我对最佳方法感到困惑。鉴于最新的jquery,我想 调用一个ajax函数 做ajax处理(成功或错误)//正常工作 成功或错误时,将状态返回到调用函数以进行进一步处理 在调用函数(doAjax)中,如何等待回调,然后完成对成功或错误的处理(在这种情况下,成功时清除表格,错误时保持原样) 感谢任何建议, Art [EDIT] 你们发现有一个错字,

  • 问题内容: 我有多个ajax查询同时运行,我希望它们等待最后一个返回,然后在所有ajax调用上运行成功处理程序。作为简化示例,请考虑: 假设所有请求都同时发送。由于它们是异步的,因此它们将在不同的时间返回。假设一个请求返回需要100毫秒,而另一个请求则需要3000毫秒。我显然不知道哪个会最先返回。他们都以某种方式更新了DOM,我希望一次将这些更改一次全部显示给查看器。我该怎么做呢? 我能想到的最好

  • 问题内容: 我知道这个问题以前曾被问过,但是所有解决方案都不适合我。 我有一个将参数发送到API的函数,并以列表的形式返回数据。我有一个UITableView设置为使用该列表,但是它在列表分配给变量之前运行。 码: 如果不立即将其作为重复投票,我将不胜感激,这是我尝试的方法。 派遣组 信号量计时 运行变量 其中包括= self和= self 。 编辑:要求提取项目, 问题答案: 您不能-也不应该-