且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

如何将 map 函数用于钩子 useState 属性

更新时间:2022-10-14 21:34:16

因为我们怀疑您没有以正确的方式设置您的状态.我试图在我的评论中解释,当您设置状态时,使用钩子不会将更新的属性与当前的属性合并.所以,你应该考虑一下.现在你正在像这样设置你的状态:

const handleName = name =>{更改状态({名称:名称.目标.值});};

在这里,您正在设置 name 属性并丢失状态的其他部分.因此,当您设置状态时,您将丢失 list 以及状态的其他部分.你应该这样做:

const handleName = name =>{const { 目标 } = 名称;更改状态(状态 =>({...状态,名称:目标值,}));};

您采用旧状态,通过 传播它,然后更新相关部分.我会在这里使用 event 而不是 name.这不是名称",实际上毕竟是事件":)

const handleName = event =>{const { 目标} = 事件;更改状态(状态 =>({...状态,名称:目标值,}));};

此外,您的代码中还有一些其他问题和不必要的部分.例如,您在处理提交和向 list 中添加对象时费力不讨好.您不需要额外的 objdata 在您的状态中将其推送到 list.如果你想构造一个额外的对象,你可以在函数本身中完成.

这是一个非常简单的方法:

const submitHandle = () =>{const { name, eventTitle, details } = state;const obj = { 名称,事件标题,详细信息};更改状态(状态 =>({...状态,列表: [ ...state.list, obj ],}))};

同样,我们使用扩展运算符来保留状态的其他部分,同时更新 list 以保留其他对象.不要像在 submitHandle 函数中那样设置状态.试着把它想得简单:)

另外,在不必要的时候,你不需要绑定你的函数.您可以在下面找到代码的工作副本.我只是删除了不必要的部分并解决了问题.

import React, { useState } from "react";从react-dom"导入 ReactDOM;const App = 道具 =>{const [状态,更改状态] = useState({名称: "",事件标题:",细节: "",列表: [],切换索引:"",编辑名称:"",编辑事件标题:"",编辑详情:"",编辑对象:{}});const handleName = 事件 =>{const { 目标} = 事件;更改状态(状态 =>({...状态,名称:target.value}));};const handleEventTitle = 事件 =>{const { 目标 } = 事件;更改状态(状态 =>({...状态,事件标题:target.value}));};const handleDetails = 事件 =>{const { 目标 } = 事件;更改状态(状态 =>({...状态,详细信息:target.value}));};const submitHandle = () =>{const { name, eventTitle, details } = state;const obj = { 名称,事件标题,详细信息};更改状态(状态 =>({...状态,列表:[...state.list, obj]}));};const resetHandle = () =>更改状态(状态 =>({...状态,名称: "",事件标题:",细节: ""}));返回 (<div><div className="jumbotron jumbotron-fluid"><div className="容器"><h1 className="display-5 text-center">让我们设置您的提醒</h1>