【问题标题】:Using setState of functional component inside a new Promise?在新的 Promise 中使用功能组件的 setState?
【发布时间】:2021-03-07 20:24:19
【问题描述】:

我知道设置状态是异步的,但是否有在新承诺中设置状态的用例?老实说,我不理解承诺,它们很难理解,它们的用例让我感到困惑。但我知道有时我 setState 和 console.log 它是未定义的。我想通过将它放入一个新的 Promise 来解决这个问题。这是一个正确的方法吗?就我的代码 sn-p 而言,我将如何构建该逻辑?我不知道 if 会检查什么。

      onRowClicked={row=>{
      const trial = new Promise((resolve,reject)=>{
       let setter = setRowIndex(row.index)
        if(setter) {
          resolve()
       } else {
          reject();
       }
       })

【问题讨论】:

  • setState 和 promises 是不相关的——你的问题 我 setState 和我 console.log 它并且它是未定义的是别的东西——但是没有实际的代码,它是一个未知的东西跨度>
  • 我只是将状态设置为 true,然后通过控制台记录它,它显示了以前的状态。它只是 setState 后跟 console.log。

标签: javascript node.js reactjs asynchronous promise


【解决方案1】:

你想打印更新的状态,这取决于你如何使用 react。

  • 类组件:可以在componentDidUpdate生命周期方法处打印this.state。或者,在 this.setState 函数中,您可以传递第二个参数,该函数在 this.state 更新后运行;

  • 钩子:使用useEffect 运行状态更新,例如:useEffect(() => console.log(myState) ,[myState])

【讨论】:

  • 这太棒了,谢谢!那么我会用什么新的 Promise 呢?有什么例子吗?
  • 很好的异步调用,例如当您向 API 发出请求以使用 fetchaxios 获取数据时,它们是基于承诺的。您可以使用then 方法链接它们。当 promise 成功时调用此方法。例如,您可以执行axios.get(url).then((response) => this.setState({ data: response}))。但您不会创建打印当前状态的承诺。
  • 对,我知道任何 fetch 调用都是异步的。但是,当您创建一个新的 Promise 时,它​​与 fetch 不同。 new Promise 的用例是什么?
猜你喜欢
  • 2022-11-22
  • 1970-01-01
  • 2021-04-20
  • 2022-11-29
  • 2021-11-23
  • 2022-01-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多