作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试从这样的表单中输入数据 -
<h1>Company Position</h1>
<input
name="company.position"
type="text"
onChange={(e) => functions.setData(e)}
value={data.company.position}
/>
进入这样的状态对象 -
const [ form, setValues ] = useState({
name : 'Jo Smith',
email : 'JoSmith@domain.com',
phone : null,
company : {
name : null,
position : null
}
});
在传入目标时使用 handleStateChange 函数
const handleStateChange = (e) => {
e.preventDefault();
setValues({
...form,
[e.target.name]: e.target.value
});
};
我似乎无法更新状态内的公司对象,我假设它会将 company.name 识别为目标名称。
如有任何帮助,我们将不胜感激。
最佳答案
e.target.name
是 company.position
,你不能设置像 obj["company.position"]
这样的嵌套属性,你必须拆分它:
<input
name="company.position"
type="text"
onChange={e => functions.setData(e)}
value={data.company.position}
/>;
const handleStateChange = e => {
e.preventDefault();
const [section, key] = e.target.name.split(".");
// section is : company
// key is : position
if (key) {
// if you have nested keys to update
setValues({
...form,
[section]: {
...form[section],
[key]: e.target.value
}
});
} else {
// if you're updating on the first level
setValues({
...form,
[section]: e.target.value
});
}
};
关于javascript - 如何从 e.target.name 更新对象状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58270949/
我是一名优秀的程序员,十分优秀!