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

手动修改React上的状态,然后调用setState

后源
2023-03-14

我正在学习React JS制作一个简单的待办事项列表,我的部分代码如下:

changeStatus(e, index) {
    this.state.tasks[index].status = e.target.value;
    this.setState((prevState) => ({
        tasks: prevState.tasks
    }));
}

正如React留档所说,我们不应该手动更改state,我们应该调用setState,所以,我在控制台上收到一个警告说,甚至在手动更改后调用setState

我这样做是因为,对我来说,这样做比分离任务、在我的数组上执行拼接、使用新值调用设置状态更为实际。

我的方法有问题吗?您建议如何以高效且不重复的方式更新状态?

共有2个答案

上官修文
2023-03-14

您不应该直接改变状态,要做到这一点,请从该状态创建一个新对象,然后更新该对象并将其设置回类似的状态

changeStatus(e, index) {
    var tasks = {...this.state.tasks}
    tasks[index].status = e.target.value;
    this.setState({tasks});
}

如果您想知道什么是{…this.state.tasks}请检查以下答案:

Reactjs中此语法“{…x}”的含义是什么

但是,您也可以使用ES5Object.assign()运算符复制状态,如

var tasks = Object.assign({}, this.state.tasks)
解浩渺
2023-03-14

试试这个:

   changeStatus(e, index) {
      const tmp = { ...this.state };
      tmp.tasks[index].status = e.target.value;
      this.setState(tmp);
   }
 类似资料:
  • 试图找出以下原因: 日志“未定义”?第一个日志是“buyin”(无论我在框中键入什么),不确定我做错了什么。非常感谢您的帮助! 问候语, 布拉姆

  • 说明 此消息用于确认或取消一个预订单 请求地址 http://api.dc78.cn/Api/bk_state 请求方式 GET 请求参数 参数 参数名称 必填 描述 范例 id 预订单编号 state 状态 目前取值有两个:1,确认预定,-1,取消预订 op 操作员 可选 table 预订桌台 可选 返回 status:1-成功,0-失败 请求方式 INI 请求参数 [action] 描述 ac

  • 说明 本协议用于会员卡修改状态,支持停用、作废等状态,支持线上和线下发的卡。 请求地址 http://api.dc78.cn/Api/mb_modify 请求方式 GET POST 请求参数 GET参数 参数名称 必填 描述 范例 mbno 卡号 mbno,id两个参数必须有一个 id 会员id state 状态 1=正常,-1=停用,-2=作废 name 姓名 可选 phone 手机号 可选 p

  • 本协议用于会员卡修改状态,支持停用、作废等状态,支持线上和线下发的卡。 请求参数说明 参数 描述 必填 示例值 类型 最大长度 action 接口参数组 是 object └action 需要调用的接口名称 是 mb_modify string get GET参数组,本组参数需要参与签名 是 object └mbno 会员卡号(mbno,id两个参数必须有一个) 否 15696132602 num

  • 问题内容: 我正在从表单组件获取数据,并尝试使用此数据设置应用程序组件的状态。 但是,state.data是一个空对象,不会更新数据。在设置模型数据是否存在之前,我会控制台记录模型数据。他们是模型中的数据。 问题答案: 是React中的异步调用。因此,您不太可能在下一行获得更新的状态值。要在状态更新成功后检查更新后的值,可以签入回调处理程序。 改变这个 至

  • 我试图使用React Hooks来管理一个简单的文本输入字段和提交输入按钮的状态。输入字段不断验证(现在只是检查长度 我已将参数扩展为setMuffinSettings,以显式返回一个对象,并已确认此返回对象的顺序为:true。因此,问题与setMuffinSettings本身有关,而不是传递给setMuffinSettings的对象不正确。 我还研究了另外两个与React挂钩(特别是挂钩)和“落