为了账号安全,请及时绑定邮箱和手机立即绑定

如何从 e.target.name 更新状态中的对象

如何从 e.target.name 更新状态中的对象

慕桂英3389331 2021-11-12 10:43:40
我正在尝试从这样的表单输入数据 -<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 识别为目标名称。任何帮助,将不胜感激。
查看完整描述

2 回答

?
幕布斯6054654

TA贡献1876条经验 获得超7个赞

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

    });

  }

};


查看完整回答
反对 回复 2021-11-12
?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

const nested = e.target.name.split(".");

    const [section, key] = nested; 

     if(nested.length > 2){

        let total = nested.length;

        let ultimo = nested[total-1];

        saveclinicHistory({

            ...clinicHistory,

            [section]: {//patient

                ...clinicHistory[section],

                [key]: {//address

                    ...clinicHistory[section][key],

                    [ultimo]:e.target.value


                }

            }

        });


查看完整回答
反对 回复 2021-11-12
  • 2 回答
  • 0 关注
  • 224 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信