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

如何设置嵌套对象的状态?

云慈
2023-03-14

对于我正在使用的插件,我必须具有如下状态:

getInitialState() {
  return {
    invalid: true,
    access: {
      access_code: '',
      zipcode: '',
      password: '',
      confirm: '',
      hospital_id: '',
    },
  }
},

如何在不设置其余访问权限的情况下设置hospital_id状态?

这似乎删除了一切,但hospital_id:

this.setState({access: {hospital_id: 1}})

共有3个答案

吕亮
2023-03-14

我现在首选的方法如下:

let newAccess = this.state.access;
newAccess.hospital_id = 1;
setState({access: newAccess});

比目前公认的答案稍微简单一些。

编辑(基于@SILENT的问题)

看起来这实际上是一种潜在的危险方法。这里的进一步阅读:关于不变性的(非常简短的)讨论。

看起来更好的方法是:

let newAccess = Object.assign({}, this.state.access, {hospital_id:1});
this.setState({access: newAccess});
何向荣
2023-03-14
let newAccess = Object.assign({}, this.state.access);
newAccess.hospital_id = 1;
this.setState({access: newAccess});
墨高杰
2023-03-14

你有几个选择:

>

  • 使用ECMA6,您可以使用对象排列方案()创建具有更新属性的对象副本。

    this.setState({
      access: {
        ...this.state.access,
        hospital_id: 1,
      },
    });
    

    可以在Object上使用本机赋值函数(Object.assign()

    this.setState({
      access: Object.assign({}, this.state.access, {
        hospital_id: 1,
      }),
    });
    

    或者对于最短的版本和原子更新:

     this.setState(({access}) => ({access: {
       ...access,
       hospital_id: 1,
     }});
    

    还有一个选择是更新插件:

    var update = require('react-addons-update');
    // per React docs 
    // https://reactjs.org/docs/update.html 
    // , you may want to change this to 
    // import update from 'immutability-helper';
    this.setState({
      access: update(this.state.access, {
        hospital_id: {$set: 1},
      })
    });
    

    我建议使用第一个。

  •  类似资料:
    • 问题内容: 对于我正在使用的插件,我必须具有如下所示的状态: 我如何在不设置其余访问权限的情况下设置hospital_id的状态? 这似乎删除了除了hospital_id之外的所有内容: 问题答案: 您有几种选择: 借助ECMA6,您可以使用对象传播建议()创建具有更新属性的对象的副本。 您可以在对象()上使用本机分配功能 或为最短的版本和原子更新: 还有一个选项是更新插件: 我建议使用第一个。

    • 我想知道是否有一种方法可以使用useState()更新React中的嵌套对象状态

    • 问题内容: 我有一个对象,它可以是任何数量的深度,并且可以具有任何现有属性。例如: 在此我想设置(或覆盖)属性,如下所示: 属性字符串可以具有任何深度,并且值可以是任何类型/事物。 如果属性键已经存在,则不需要合并对象和数组作为值。 前面的示例将产生以下对象: 如何实现这种功能? 问题答案: 此函数使用您指定的参数应添加/更新容器中的数据。请注意,您需要跟踪架构中的哪些元素是容器,哪些是值(字符串

    • 我有一个对象,可以是任何数量的层次深,可以有任何现有的属性。例如: 在此基础上,我希望设置(或覆盖)如下属性: 属性字符串可以有任何深度,值可以是任何类型/事物。 如果属性键已经存在,则不需要合并作为值的对象和数组。 上一个示例将生成以下对象: 如何实现这样的功能?

    • 我有这门课: 并希望在“列表”状态数组中的“卡片”数组上使用setState。以前,我在子组件中使用了cards数组,但现在我将其上移到Board类。这是我以前拥有的功能。 我如何改变它,使它现在工作,卡是在另一个数组? 我无法解决它看这些帖子: ReactJS-数组中对象键的设置状态 如何编辑状态数组中的项?

    • 谁能告诉我我在这里做错了什么?从console.log,我可以看到日期功能正在正常工作。但是,即使在之后,时间戳也不会更新。提前感谢!