编辑:这是一个重复问题,请参见此处
我找不到在设置状态时使用动态键名的任何示例。这就是我想做的事情:
inputChangeHandler : function (event) {
this.setState( { event.target.id : event.target.value } );
},
在React中无法使用 event.target.id 作为状态键(key)进行更新吗?
编辑:这是一个重复问题,请参见此处
我找不到在设置状态时使用动态键名的任何示例。这就是我想做的事情:
inputChangeHandler : function (event) {
this.setState( { event.target.id : event.target.value } );
},
在React中无法使用 event.target.id 作为状态键(key)进行更新吗?
感谢 @Cory 的提示,我使用了这个:
inputChangeHandler : function (event) {
var stateObject = function() {
returnObj = {};
returnObj[this.target.id] = this.target.value;
return returnObj;
}.bind(event)();
this.setState( stateObject );
},
如果你正在使用ES6或Babel转译器来转换你的JSX代码,你也可以使用计算属性名来完成这个操作:
inputChangeHandler : function (event) {
this.setState({ [event.target.id]: event.target.value });
// alternatively using template strings for strings
// this.setState({ [`key${event.target.id}`]: event.target.value });
}
trad
,这正是我寻找的,以避免在 <Radio />
实现中出现代码重复。 - Adesh Mthis.setState({ [event.target.id]: event.target.value });
,那么如何使用 this.state......
访问该状态呢? - user3574492当你需要处理多个被控制的输入元素时,你可以给每个元素添加一个name属性,并让处理函数根据event.target.name的值来选择要做什么。
例如:
inputChangeHandler(event) {
this.setState({ [event.target.name]: event.target.value });
}
this.state([event.target.name])
? - Kirankumar Dafda我是如何完成这个的...
inputChangeHandler: function(event) {
var key = event.target.id
var val = event.target.value
var obj = {}
obj[key] = val
this.setState(obj)
},
this.forceUpdate();
这在最新的React中不应该出现。让我们稍后再看看问题所在吧! - xploreraj我只是想补充一下,你也可以使用解构重构代码,让它看起来更整洁。
inputChangeHandler: function ({ target: { id, value }) {
this.setState({ [id]: value });
},
this.setState({ [`${event.target.id}`]: event.target.value}, () => {
console.log("State updated: ", JSON.stringify(this.state[event.target.id]));
});
请注意引号字符。[ ]
是做什么用的?为什么 React 需要它? - Amon我曾经遇到过类似的问题。
我想要将第二层键位的状态存储到一个变量中。
例如:this.setState({permissions[perm.code]: e.target.checked})
但是这不是有效的语法。
我使用了以下代码来实现:
this.setState({
permissions: {
...this.state.permissions,
[perm.code]: e.target.checked
}
});
使用 .map
循环的工作方式如下:
{
dataForm.map(({ id, placeholder, type }) => {
return <Input
value={this.state.type}
onChangeText={(text) => this.setState({ [type]: text })}
placeholder={placeholder}
key={id} />
})
}
请注意type
参数中的[]
。
希望这有所帮助 :)
我正在寻找一个美观简单的解决方案,然后我发现了这个:
this.setState({ [`image${i}`]: image })
使用 ES6+,你只需要这样写 [${variable}
]。
当给定的元素是一个对象时:
handleNewObj = e => {
const data = e[Object.keys(e)[0]];
this.setState({
anykeyofyourstate: {
...this.state.anykeyofyourstate,
[Object.keys(e)[0]]: data
}
});
};
希望这能对某些人有所帮助