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

reactJS: setState()值呈现在console.log但不更新状态

章飞章
2023-03-14

这里我遇到了setState()的小问题。我知道这是一个异步函数。我也使用了SO示例中的一些示例,我在console.log()中获得了我的值,但这个值在状态中没有更新。

我需要在这里更改什么来获得更新的state()值。请给我任何建议。

这里在我的代码选项卡更改状态值应该更新为表单提交。

//代码

handleOnSubmitJoinUS(e) {
    e.preventDefault();
    const { name,  phone, email, comment, activeTab } = this.state;

    if (activeTab == 0 ) {

        this.setState({comment: "Message for : Becoming a team member"}, () => {
            console.log(this.state.comment);
        });

    } else if (activeTab == 1) {
        this.setState({comment: "Message for : Becoming a Vendor Partner"}, () => {
            console.log(this.state.comment);
        });

    } else {
        this.setState({comment: "Message for : Becoming a Designer Associates"}, () => {
            console.log(this.state.comment);
        });
    }
    
    
    const sendingMsgData = {
        name,  phone, email, comment
    }

    //attempt to login
    if (sendingMsgData.email && sendingMsgData.name && sendingMsgData.phone  != null  ) {
        this.setState({msg : "Thank you! we recieved your submission successfully, we will surely contact you within 24 hours"});
        window.setTimeout(function(){window.location.reload()}, 1000);
    } 
    this.props.sendingConsultation(sendingMsgData);
    
}

共有1个答案

洪经义
2023-03-14

正如您所说,setState是异步的,所以函数的其余部分继续运行,在状态实际上在this.state中设置之前完成所有消息发送等等。对于您的原始代码,这意味着代码的其余部分应该在setState后回调中。

但是,它看起来根本不需要处于状态,因为它是从状态中派生出来的。activeTab:

handleOnSubmitJoinUS(e) {
  e.preventDefault();
  const { name, phone, email, activeTab } = this.state;
  let comment;

  if (activeTab == 0) {
    comment = "Message for : Becoming a team member";
  } else if (activeTab == 1) {
    comment = "Message for : Becoming a Vendor Partner";
  } else {
    comment = "Message for : Becoming a Designer Associates";
  }

  const sendingMsgData = {
    name,
    phone,
    email,
    comment,
  };

  //attempt to login
  if (sendingMsgData.email && sendingMsgData.name && sendingMsgData.phone != null) {
    this.setState({ msg: "Thank you! we recieved your submission successfully, we will surely contact you within 24 hours" });
    window.setTimeout(function () {
      window.location.reload();
    }, 1000);
  }
  this.props.sendingConsultation(sendingMsgData);
}

如果出于某种原因确实需要它处于状态,那么可以在最后执行this.setState({comment})

 类似资料:
  • 我猜这可能与从父级打开有关,但我有其他组件,它们内部的状态发生变化,所以我有点困惑,为什么这个组件不尊重它的新状态。 谢谢

  • 我是一个初学者React开发人员,我对这个特定的代码片段有一个问题。 问题: 虽然我直接复制了虚拟数据的值并将其作为单独的子项呈现,但并不是所有的虚拟数据都被呈现 我特意选择使用useRef而不是useState,因为在用户添加或编辑他们想要的任何链接之后,我想将keyRef发送到NoSQL数据库;然而,当我使用useState()时,它给了我陈旧的状态问题,其中包含所有链接的数组没有不断更新。

  • 问题内容: 我有一段代码 单击“ Hi”消息时,仅组件会继续重新渲染,而组件不会重新渲染。 为什么在状态更改时不重新渲染组件? 我想说,由于它是组件的一个属性而不会发生,但是仍然会被JSX中的组件评估,所以不确定。 完整示例https://codesandbox.io/s/529lq0rv2n(检查控制台日志) 问题答案: 这个问题已经很老了,但是由于您似乎没有得到满意的答案,因此我也会尝试一下。

  • 在父组件中: 我有一个布尔状态: 我将其发送到子组件: 根据布尔值,我希望它呈现不同的组件。

  • 问题内容: 我要说的是今天要学习react和redux,但是我不知道如何在状态更改后强制组件重新渲染。 这是我的代码: 我可以触发更新的唯一方法是使用 在构造函数内部,以便我手动触发组件的更新状态以强制重新渲染。 但是如何链接存储状态和组件状态? 问题答案: 仅当组件的状态或道具发生更改时,组件才会重新渲染。您不是依靠this.state或this.props,而是直接在render函数中获取存储

  • 我只是启动libgdx,这看起来很简单,但我不明白。screen对象中的render方法将调用WorldRenderer中的render方法: //屏幕呈现方法