【发布时间】:2020-10-04 07:15:17
【问题描述】:
我试图理解以下语法:
this.setState(currState => ({
...currState,
user: {
...currState.user,
[name]: value,
},
}));
我知道 setState 会通过影响组件的当前状态来更新这个组件的状态,在这种情况下,将 currentState 和 user 对象各自合并为一个新状态。这是否意味着当我添加一个新用户A 然后添加第二个用户B 时,状态对象将同时具有A 和B 对象作为新状态,即两个user 对象?
class AddUser extends Component {
state = {
user: {
firstName: '',
lastName: '',
username: '',
},
userExists: false,
};
contactExists = currUsername => {};
handleSubmit = event => {};
handleInputChange = event => {
const { name, value } = event.target;
this.setState(currState => ({
...currState,
user: {
...currState.user,
[name]: value,
},
}));
};
isDisabled = () => {};
render() {
const { firstName, lastName, username } = this.state.user;
return (
<div>
<h1>New User</h1>
<form onSubmit={this.handleSubmit}>
<div>
<input
type="text"
name="firstName"
placeholder="Enter First Name"
value={firstName}
onChange={this.handleInputChange}
/>
<input
type="text"
name="lastName"
placeholder="Enter Last Name"
value={lastName}
onChange={this.handleInputChange}
/>
<input
type="text"
name="username"
placeholder="Enter username"
value={username}
onChange={this.handleInputChange}
/>
</div>
<button disabled={this.isDisabled()}>Add</button>
</form>
{this.state.userExists ? (
<p className="error">You cannot add a user that already exists.</p>
) : (
''
)}
</div>
);
}
}
【问题讨论】:
-
你可以试试运行看看会发生什么:)
-
您将覆盖
user子对象的相应属性。如果您想拥有多个用户,该属性应该是一个此类对象的数组(显然您必须更改您的状态更新代码以匹配)。 -
@ggorlen 我确实在控制台中运行过它,谢谢!但是您是否注意到接受的答案如何帮助我揭示了一些完全让我失望的东西!?无论如何,谢谢!
标签: javascript reactjs ecmascript-6 destructuring