reactjs - React 在状态对象数组中设置多个输入
问题描述
我不确定是否可以在我的 React 应用程序中<form>
使用以下输入字段:
<TextField />
<TextField />
<TextField />
我有一个状态
const [info, setInfo] = useState({
firstName:"",
lastName:"",
colors:[]
})
我知道如何使用 ES6 Spread like 设置单个字段setInfo(...info, firstName:e.target.value)
,但这似乎不适用于 Object 中的数组。
目前,如果我想设置颜色,我去:
<TextField onChange={addColor1}/>
<TextField onChange={addColor2}/>
<TextField onChange={addColor3}/>
然后我创建一个array colors = [color1, color2, color 3]
,最后我 `setInfo({...info, colors:colors})
但是我想知道是否有一种方法可以设置颜色数组而不必编写重复的函数,例如addColor1
,addColor2
...
谢谢!
解决方案
是的,您绝对可以使用单个函数来处理所有表单控件的更改事件。
最好将颜色的数据结构更改为对象或地图,但如果您想使用数组,这里有一个示例:
export default function App() {
const [info, setInfo] = useState({
firstName: "",
lastName: "",
colors: new Array(3).fill("")
});
const handleChange = ({ target: { name, value } }) => {
setInfo((prevInfo) => {
if (name === "firstName" || name === "lastName") {
return { ...prevInfo, [name]: value };
}
// to get 0/1/2 from color0/color1/color2
const colorIndex = +name[name.length - 1];
return {
...prevInfo,
colors: Object.assign([...prevInfo.colors], { [colorIndex]: value })
};
});
};
return (
<div className="App">
<input
type="text"
value={info.firstName}
name="firstName"
onChange={handleChange}
/>
<input
type="text"
value={info.lastName}
name="lastName"
onChange={handleChange}
/>
<div>
{info.colors.map((color, index) => {
return (
<textarea
key={index}
value={color}
name={`color${index}`}
onChange={handleChange}
/>
);
})}
</div>
{JSON.stringify(info)}
</div>
);
}
推荐阅读
- html - 从输入字段获取原始文本而不是日期对象
- ssis - 即使使用错误的 Kingswaysoft 连接参数,SSIS 部署的项目也能成功验证
- r - 根据 R 中的条件计算日期之间的平均差
- react-native-flatlist - React Native Draggable Flatlist 仅适用于 ScrollView 但错误?
- java - 如何在消费者 Java 8 中抛出异常
- c# - ViewModel 不更新表单 (Xamarin.Forms)
- json - 实现自定义Newtonsoft JsonConverter(阅读器)
- django - 如何过滤查询集以获取由另一个字段中的每个值分组的一个字段中的最大值?
- android - Flutter 如何在后台发现蓝牙设备(flutter_bluetooth_serial)
- python - 像浏览器一样访问私有 github 页面(使用 Python)