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

设置react中的状态延迟

金赤岩
2023-03-14

我目前在react native中有一个函数,它执行以下操作:

resetThenSet = (id, arrayId, title) => {
    if(arrayId != 'selectProduct') {
            // Setting state for each selected dropdown in selectedDropdowns
             this.setState({
               dataShowingToggle: true,
               selectedDropdowns: {...this.state.selectedDropdowns, [arrayId]: title}
             }, this.getProductCost(arrayId, id)
           );
}

我运行上述命令,可以确认arrayId和title变量有效并包含数据。arrayId也不是“selectProduct”。我在调试时在那里添加了一个console.log,以确保它运行,事实上确实如此。我期望的行为是状态立即更新。

但是,所选下拉列表的状态不会更新。在this.setState更新之后添加:console.log(this.state)时,没有任何更改。如果我运行该函数两次,它将在第二次运行时更新。

为了进一步测试它,我添加了这样的静态输入:

this.setState({
           dataShowingToggle: true,
           selectedDropdowns: {...this.state.selectedDropdowns, testField: 'me here'}
         }, this.getProductCost(arrayId, id)
       );
       console.log(this.state);

它仅在第一次运行后更新状态。我错过什么了吗?

更新:我更新了代码,以在调用回setstate时运行console.log:

  if(arrayId != 'selectProduct') {
    // Setting state for each selected dropdown in selectedDropdowns
    console.log(arrayId + title);
    console.log('i run');
     this.setState({
       dataShowingToggle: true,
       selectedDropdowns: {...this.state.selectedDropdowns, [arrayId]: title}
     }, console.log(this.state)
   );
  };

console.logarrayId标题的是“定量产品25”console.log(我运行),然后这个状态不显示定量产品25

共有1个答案

沈俊晤
2023-03-14

setState是异步的。这就是函数调用具有可选回调的原因。

我想你可能还有其他问题。

调用setState时,请尝试将控制台日志放入回调函数中,以查看状态何时用您提供的值更新。

 类似资料:
  • 我正在使用React-useState创建状态为的对象。在成功调用API后,将更新为数据对象。 我有一个表单可以更改此状态,但我还有一个取消按钮。单击“取消”时,如何将此状态恢复为其初始值(API调用后)? 我应该创建另一个状态变量和存储初始状态在那里,然后更新我的状态基于?

  • 问题内容: 因此,我正在尝试为从服务器获取数据的编辑组件设置初始状态,现在应该可以在组件状态下对其进行编辑。但是当我尝试这样做时: 因为这是在渲染中,所以我陷入了无限循环。我不应该将组件状态与查询组件一起使用吗?如果没有,那还有什么选择呢? 问题答案: 无论哪个组件需要此数据作为状态,都应在组件内部进行渲染,然后将数据作为道具传递给它。例如:

  • 我在一个三元组中使用了< code>this.setState(),并试图找出它返回的内容。文档没有提供任何关于它返回什么的信息。

  • 我想测试一个组件,它包含条件渲染。因此,如果一个状态为true,那么JSX-HTML应该呈现,如果不是false的话。 如果我想使用Jest、Enyzme、React测试库来测试这一点,我应该如何继续? 我有一个组件,它的实现细节对这个主题并不重要。请注意,它包含 对于我的测试,我想把它设置为真。

  • 从输入字段中,我将值作为参数发送给设置状态的函数。我有多个输入字段,所以希望使用它们的名称(等于它们的状态键),然后使用相同的函数,并将键和值传递给设置状态的函数。 这是我的代码。

  • 是否有方法将defaultValue传递给状态?我也尝试了value={},但值根本不变。