react-hooks - 如何使用钩子传递文本框目标值 onchange 事件并更改对象属性
问题描述
使用 useState 更新完整的对象属性
使用钩子传递文本框目标值 onchange 事件并更改对象属性
function ExampleObjectHooks() {
const [name, setname] = useState({ first: '', last: '' });
const onInputNameChange = (e) => {
setname({ first: e.target.value, last: e.target.value });
console.log(name);
}
return (
<div>
<form>
<input type="text" onChange={(e) => onInputNameChange(e)} ></input>
<input type="text" onChange={e => onInputNameChange(e)} ></input>
</form>
{name.first}{name.last}
</div>
);
}
解决方案
为每个字段添加一个name
属性input
,并使用名称(key
在代码中)更新状态。需要自己合并各个字段状态的节点。如此传播先前的状态,并覆盖您刚刚更新的字段。
const { useState } = React;
function ExampleObjectHooks() {
const [name, setname] = useState({ first: '', last: '' });
const onInputNameChange = ({ target }) => {
const { name: key, value } = target;
setname(state => ({
...state,
[key]: value
}));
};
return (
<div>
<form>
<input name="first" type="text" onChange={onInputNameChange} ></input>
<input name="last" type="text" onChange={onInputNameChange} ></input>
</form>
{name.first} {name.last}
</div>
);
}
ReactDOM.render(
<ExampleObjectHooks />,
root
);
<script crossorigin src="https://unpkg.com/react@17/umd/react.development.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@17/umd/react-dom.development.js"></script>
<div id="root"></div>
推荐阅读
- conv-neural-network - 如何在稍作修改的模型中重新使用旧权重?
- javascript - 在toggleFade()之后制作位置:绝对div相对
- ruby-on-rails - 如何在 Ruby on Rails 中更改数据更改的时间戳
- node.js - 谷歌云用户项目访问被拒绝错误
- apache-kafka - 如何恢复被踢出组的Kafka Consumer?
- html - Visual Studio - getElementsByTagName() -
- arrays - 如何使用索引匹配(数组公式)从下拉列表中返回相应的值?
- linux - Linux 中的持久提示符(不仅仅是 shell)
- javascript - 一旦我达到最大并发调用数,如何导致 fetch 调用排队?
- javascript - 如何使用 XSLT 将节点位置编号作为元素附加到 XML?