reactjs - 如何使用 React Hooks 将对象推送到数组中
问题描述
我正在尝试将 obj 推送到位于嵌套对象中的数组中。最好的方法是什么,因为我希望它也可以使用新的 obj 来渲染组件。
我想要实现的是让用户能够为任务创建新类别
const [formElements, setFormElements] = useState({
task: {
type: 'text',
value: 'text',
className: 'task-input'
},
categories: {
type: 'select',
value: 'select',
className: 'categories-input',
cat: [
{value: 'money', displayValue: 'Money'},
{value: 'health', displayValue: 'Health'},
{value: 'daily', displayValue: 'Daily'},
{value: 'food', displayValue: 'Food'}
]
}
})
const buttonAddCategoryHandler = (e) => {
e.preventDefault()
setFormElements(prevState => {
???
})
}
我知道这可能是一个不好的问题,但我在理解如何在这种情况下更新状态时遇到了问题。或者这种拥有状态的方式从一开始就不好?
解决方案
const buttonAddCategoryHandler = (e) => {
e.preventDefault()
const newArray = [...formElements.categories.cat, {value: 'newVal', displayValue: 'Friendly Value'}]
setFormElements({
...formElements,
categories: {
...formElements.categories,
cat: newArray
}
})
}
推荐阅读
- javascript - 在 textarea 中安装文本编辑器
- asp.net-core - 无法在剃刀页面上获取查询元素
- servicestack - 在 ServiceStack 解决方案中两次定义实体是否是最佳实践?
- ruby-on-rails - 在 Rails Admin 中创建新对象在更新后不起作用
- entity-framework - 使用 ASP.NET Core 3.1 和 Entity Framework 进行初始迁移时,出现错误“实体类型 'X' 需要定义主键”
- django-admin - 在 django 管理站点中更改模型类名称
- jquery - jQuery ajax 响应时间
- xamarin - 仅使用 WSDL 文件在 Xamarin 表单中使用 SOAP Web 服务
- tensorflow - TensorFlow 适用于 Slurm 交互式会话,但不适用于 Slurm 作业
- oracle - wso2 身份服务器错误 ORA-12839: 修改后无法并行修改对象