对于我正在使用的插件,我必须具有如下状态:
getInitialState() {
return {
invalid: true,
access: {
access_code: '',
zipcode: '',
password: '',
confirm: '',
hospital_id: '',
},
}
},
如何在不设置其余访问权限的情况下设置hospital_id状态?
这似乎删除了一切,但hospital_id:
this.setState({access: {hospital_id: 1}})
我现在首选的方法如下:
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});
let newAccess = Object.assign({}, this.state.access);
newAccess.hospital_id = 1;
this.setState({access: newAccess});
你有几个选择:
>
使用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,我可以看到日期功能正在正常工作。但是,即使在之后,时间戳也不会更新。提前感谢!