我在React中有一个要更新的表单。此表单已经具有初始值,当输入为空''
时,我想将状态下的表单项更新回其初始值。
当用户这样输入或更新字段时,我将不变地更新状态对象:
handleInputChange = (name, {value}) => {
if(value === '') {
this.setInitialState(name);
}
let val = {...this.state, [name] : value}
this.setState(val);
}
setInitialState
函数可以采用正在更新的输入字段的名称。问题是如何将状态中的一个项目仅设置回其初始值,而又不将整个状态对象更新回初始状态,而我却试图一成不变地做到这一点。
以下是该功能:
setInitialState = (val) => {
let active = this.props.member.active;
let age = this.props.member.age;
let firstname = this.props.member.firstname;
let lastname = this.props.member.lastname;
let gender = this.props.member.gender;
let id = this.props.member.id;
let patientId = this.props.member.patientId;
}
我尝试执行以下操作:
this.props.member.${val}
this.props.member.val
我一直在寻找其他问题和将整个状态对象更新回初始状态的地方,但这不是我想要做的。
如果您有地方可以看到如何做的话,我也愿意考虑一下。
谢谢
答案 0 :(得分:2)
这是使用字符串访问对象属性的方式:
this.props.member[val]
基于您尝试过的一般示例:
var obj = { foo: "bar" };
console.log(obj.foo); // "bar". This is dot notation.
console.log(obj["foo"]); // "bar". This is what you need here - bracket notation
console.log(obj."foo"); // Syntax error
console.log(obj.${"foo"}); // Syntax error
答案 1 :(得分:1)
如果name
中收到的属性handleInputValue
与member.*
对象键的属性键相对应,则可以按照以下步骤进行操作:
handleInputChange(name, { value }) {
if (value === '') {
this.setState({
[name]: this.props.member[name]
})
} else {
this.setState({
[name]: value
})
}
}