如果我有属性名称,有没有更简单的更新状态的方法?比这个更简单的方法:
function thingChanged(name, value) {
var x = {};
x[name] = value;
this.setState(x)
}
如果我有属性名称,有没有更简单的更新状态的方法?比这个更简单的方法:
function thingChanged(name, value) {
var x = {};
x[name] = value;
this.setState(x)
}
目前的ECMAScript版本不能进一步减少代码量。也许在ES6中可能会有所改善,这取决于语言将具备哪些特性。
然而,如果您担心代码冗余,可以将该方法添加到混合中,并在所有需要的组件中引用它。
更新:感谢@FakeRainBrigand提供ES6语法,允许减少代码:setState({[name]:value});
function thingChanged(name, value) {
this.setState(Object.defineProperty({}, name, {value:value}))
}
ES6 简写:
this.setState({...x});
这句话是将 x 对象中的所有属性展开并作为新的 state 设置。
this.setState({ x });
这句话是将变量 x 直接设置为新的 state 值。
name
的值,而不是基于变量name
的键。因此,它与原始问题不同。 - Samuli HakoniemithingChanged
方法的混入。 - CristiksetState({[name]: value})
是有效的。对我来说,它仍然是三行(对于我来说,三个不同的开括号在一起很难辨认),所以几乎没有区别。但是,对于深层次的更改,像更新插件这样的东西还是很有用的。 - Brigand