reactjs - React 中 webForm 的单个 onChange 处理程序
问题描述
this.state = {
data : {
name : {fname : 'sinni' , lname : 'jain' },
address : { city : 'jodhpur' , state : 'rajasthan'}
sex : 'male'
}
status : 'idiot'
}
in render fuction...
render ()
{
const { data , status } = this.state;
return (
<form>
<p> first name </p>
<input type='text' value={data.name.fname} onChange={changeHandler} />
<p> last name </p>
<input type='text' value={data.name.lname} onChange={changeHandler} />
{//so on whole form }
{ and sex and status are select box }
</form>
)
}
enter code here
我有这样的输入条目的整个表格......
如何创建 onChangeHandler 函数以便可以更新所有值。
我如何管理 [even.target.name] 以及如何使用 setState 分配它,这样其余数据就不会受到影响。
解决方案
首先,您需要为每个输入命名,data-parent
如果它是嵌套属性
名称必须是您要更改状态的属性的键
和data-parent
attr,这将是嵌套组件的名称
请检查下面的示例
https://codesandbox.io/s/react-input-example-forked-tu7hp?file=/src/index.js
class MyComponent extends React.Component {
state = {
data: {
name: { fname: "sinni", lname: "jain" },
address: { city: "jodhpur", state: "rajasthan" },
sex: "male"
}
};
changeHandler = (e) => {
const parent = e.target.dataset.parent;
const name = e.target.name;
const newValue = e.target.value;
this.setState((prevState) => {
if (parent) {
return {
data: {
...prevState.data,
[parent]: {
...prevState.data[parent],
[name]: newValue
}
}
};
} else {
return {
data: {
...prevState.data,
[name]: newValue
}
};
}
});
};
render() {
const { data } = this.state;
return (
<div>
<input
type="text"
name="fname"
data-parent="name"
value={this.state.data.name.fname}
onChange={this.changeHandler}
/>
<input
type="text"
name="lname"
data-parent="name"
value={this.state.data.name.lname}
onChange={this.changeHandler}
/>
<input
type="text"
name="city"
data-parent="address"
value={this.state.data.address.city}
onChange={this.changeHandler}
/>
</div>
);
}
}
推荐阅读
- java - return' 字符和换行符与正则表达式 java 8 一起使用
- android - 错误类型 3 - 多个项目中不存在活动类
- python - 如何从具有条件的文件夹绝对名称创建键值
- javascript - 如何在数组中的项目数之间分配 100
- cadence-workflow - 在运行 cadence 时指定 cassandra 的端口用户名、密码和主机信息
- r - 将tex转换为docx时图形的Pandoc问题
- ethereum - 使用 web3 发送已签名的以太坊交易时,总是出现“gas * price + value 资金不足”错误
- python - 如何将字典打印成两列 Google 表格
- jestjs - Stencil 组件上的 Jest 测试不应用变量的更改
- java - 诡异的!弹簧靴中的长值舍入问题