javascript - 如何在反应中向状态对象添加数据?
问题描述
我创建了this.state.data
对象。现在我需要将this.state.email
and this.state.password 放入this.state.data.email2
andthis.state.data.password2
我想创建本地存储。为此,我需要一个可以存储数据的对象。this.state.email
并且this.state.password
是输入。
class Register extends Component {
constructor(props){
super(props);
this.state = {
email: '',
password: '',
data: {
email2: '',
password2: '',
},
}
// This binding is necessary to make `this` work in the callback
this.handleEmailChange = this.handleEmailChange.bind(this);
this.handlePasswordChange = this.handlePasswordChange.bind(this);
this.handleSubmit = this.handleSubmit.bind(this);
}
handleEmailChange = (event) => {
this.setState({email: event.target.value});
}
handlePasswordChange = (event) => {
this.setState({password: event.target.value});
}
handleSubmit = (event) => {
event.preventDefault();
console.log(this.state.email);
console.log(this.state.password);
/*
Take values from input, ant put it into this state data array
*/
// Reset form;
this.setState({
email: '',
password: '',
})
}
当我激活handleSubmit
方法时,我希望采用this.state.email
, 和this.state.password
. 并将其放入对象this.state.data
解决方案
希望你需要传递this.state.email and this.state.password
给this.state.data
您可以自行执行此操作handleEmailChange
,handlePasswordChange
也可以使用箭头函数,因此不需要在构造函数中绑定 this。
检查下面的代码:
class App extends Component {
constructor(props) {
super(props);
this.state = {
email: '',
password: '',
data: {
email2: '',
password2: '',
},
}
}
handleEmailChange = (event) => {
this.setState({
email: event.target.value,
data: {
...this.state.data,
email2: event.target.value,
}
});
}
handlePasswordChange = (event) => {
this.setState({
password: event.target.value,
data: {
...this.state.data,
password2: event.target.value,
}
});
}
handleSubmit = (event) => {
event.preventDefault();
console.log(this.state.email);
console.log(this.state.password);
console.log('object data');
console.log(this.state.data);
/*
Take values from input, ant put it into this state data array
*/
// Reset form;
this.setState({
email: '',
password: '',
}, () => console.log(this.state))
}
render() {
return (
<div>
<input type="text" onChange={this.handleEmailChange} value={this.state.email} />
<br/><br/>
<input type="text" onChange={this.handlePasswordChange} value={this.state.password} />
<br/><br/>
<button type="button" onClick={this.handleSubmit}>Submit</button>
</div>
);
}
}
并且不需要为类似的功能编写单独的事件,检查一次演示,你可以像下面这样:
<input type="text" data-field = "email" onChange={this.handleChange} value={this.state.email} />
<input type="text" data-field = "password" onChange={this.handleChange} value={this.state.password} />
并且在handleChange
handleChange = (event) => {
this.setState({
[event.target.getAttribute('data-field')]: event.target.value,
data: {
...this.state.data,
[`${event.target.getAttribute('data-field')}2`]: event.target.value,
}
});
}
希望这可以帮助。
推荐阅读
- django - 如何向 Django self.request 添加属性
- python - 您可以在 OpenCV 中将两个鱼眼图像转换为单个等距矩形图像吗?
- javascript - 使用钩子在嵌套对象中推送新数据的最佳方法是什么?
- c# - 在 Azure 应用服务上使用 C# System.Timers.Timer
- python-3.x - 熊猫添加平均列标题
- reactjs - 为什么我的 axios 向 nodemailer 发布请求会导致 431(请求标头字段太大)?
- python - 在不改变第一列的结果的情况下对两列的 numpy 数组进行排序
- python - 找不到模块 \atari_py\ale_interface\ale_c.dll (或其依赖项之一)
- java - 合并 mybatis 开关盒
- sql - Microsoft Access - 查询 - 最近的条目