在React挂钩中,如何在要更改的状态下引用对象的通用属性?

戴夫

我正在为我的React 16.13.0应用程序使用React钩子。我正在尝试编写一个通用函数来更新状态下的复杂对象的属性。

  const [coop, setCoop] = React.useState(props.coop);

我的表单包含如下元素

<Input
        inputType={"text"}
        title={"Name"}
        name={"name"}
        value={coop.name}
        placeholder={"Enter cooperative name"}
        handleChange={handleInput}
        errors={errors}
      />
...
<Input
        inputType={"text"}
        title={"Street"}
        name={"coop.addresses[0].formatted"}
        value={coop.addresses[0].formatted}
        placeholder={"Enter address street"}
        handleChange={handleInput}
        errors={errors}
      />

我尝试编写以下函数,但是我不知道如何在函数中引用“ coop”状态的通用属性。

  const handleInput = (e) => {
    let self = this;
    let value = e.target.value;
    let name = e.target.name;
    if (name.indexOf("[") === -1) {
      console.log("updating " + name + " with value:" + value);
      setValue(coop, name, value);
    } else {
      const keys = name.split(/[\[\].]+/);
      setCoop(updateValue(coop, keys, value));
    }
  };

  const updateValue = (obj, name, value, index = 0) => {
    if (name.length - 1 > index) {
      const isArray = Array.isArray(obj[name[index]]);
      obj[name[index]] = this.updateValue(
        isArray ? [...obj[name[index]]] : { ...obj[name[index]] },
        name,
        value,
        index + 1
      );
    } else {
      obj = { ...obj, [name[index]]: value };
    }
    return obj;
  };
    ...

  const setValue = (obj, is, value) => {
    console.log("setting " + is + " of value: " + value);
    if (typeof is == "string") return setValue(obj, is.split("."), value);
    else if (is.length === 1 && value !== undefined) {
      return setCoop({ coop: obj[is[0]] = value });
    } else if (is.length === 0) return obj;
    else return setValue(obj[is[0]], is.slice(1), value);
  };

这条线有麻烦

setCoop({ coop: obj[is[0]] = value });

如何引用“ coop”的通用属性及其值?

丹尼斯瓦什

这个问题与钩子或React(其JavaScript)无关。

基本上,您询问如何在对象中设置通用密钥。

您应该为此使用实用程序功能,因为它不是简单的解决方案,请参见 lodash.set

设置对象路径处的值。如果路径的一部分不存在,则会创建它。为缺少的索引属性创建数组,而为所有其他缺少的属性创建对象。使用_.setWith自定义路径创建。

const object = { 'a': [{ 'b': { 'c': 3 } }] };
 
_.set(object, 'a[0].b.c', 4);
console.log(object.a[0].b.c);
// => 4
 
_.set(object, ['x', '0', 'y', 'z'], 5);
console.log(object.x[0].y.z);
// => 5

对于您的特定情况,假设obj[is[0]]是您可以用来设置状态的路径。

但是请确保不要更改状态,将其视为不可变的,_.set在状态副本上使用

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在redux状态下添加/更改属性?

来自分类Dev

如何在React组件状态下更新对象的单个属性?

来自分类Dev

如何在useEffect挂钩中设置状态?

来自分类Dev

React useReducer查找并更改状态下的单个对象

来自分类Dev

如何在reactJS状态下动态设置对象属性的值?

来自分类Dev

如何在 React 状态下从嵌套的 Array 对象设置 radioGroup 的 defaultValue?

来自分类Dev

如何在悬停状态下对CSS进行许多更改?

来自分类Dev

如何在反应状态下使用索引更新对象?

来自分类Dev

如何在设置状态下更新对象数组

来自分类Dev

如何在React Hook状态下正确更新数组

来自分类Dev

如何在 React 组件的状态下拼接数组

来自分类Dev

React-访问在useEffect挂钩中结算的对象属性

来自分类Dev

如何在ReactJS挂钩中更改日期格式?

来自分类Dev

如何在Liferay搜索挂钩中获取FileEntry对象

来自分类Dev

不确定在组件状态下更新嵌套对象属性时如何触发useEffect

来自分类Dev

如何通过组件将函数作为值分配给Vuex状态下的对象的属性?

来自分类Dev

调度不更改Redux状态下的对象

来自分类Dev

在Redux状态下更新每个对象中的特定属性

来自分类Dev

在状态下访问对象属性时返回null?

来自分类Dev

在数组状态下更新属性对象reactJS

来自分类Dev

如何在CSS的禁用状态下更改不透明度

来自分类Dev

如何在禁用状态下更改组合框的前景?

来自分类Dev

在docker中,如何在运行状态下更改共享文件夹

来自分类Dev

如何使用嵌套对象更改状态挂钩?

来自分类Dev

如何在不同状态下访问DOM中<a>的'href'属性?

来自分类Dev

如何在休眠状态下通过ArrayList保存多个对象?

来自分类Dev

在React挂钩中更改处理程序

来自分类Dev

更新React挂钩中的嵌套对象

来自分类Dev

在React挂钩中切换对象状态内的值的正确方法是什么?

Related 相关文章

  1. 1

    如何在redux状态下添加/更改属性?

  2. 2

    如何在React组件状态下更新对象的单个属性?

  3. 3

    如何在useEffect挂钩中设置状态?

  4. 4

    React useReducer查找并更改状态下的单个对象

  5. 5

    如何在reactJS状态下动态设置对象属性的值?

  6. 6

    如何在 React 状态下从嵌套的 Array 对象设置 radioGroup 的 defaultValue?

  7. 7

    如何在悬停状态下对CSS进行许多更改?

  8. 8

    如何在反应状态下使用索引更新对象?

  9. 9

    如何在设置状态下更新对象数组

  10. 10

    如何在React Hook状态下正确更新数组

  11. 11

    如何在 React 组件的状态下拼接数组

  12. 12

    React-访问在useEffect挂钩中结算的对象属性

  13. 13

    如何在ReactJS挂钩中更改日期格式?

  14. 14

    如何在Liferay搜索挂钩中获取FileEntry对象

  15. 15

    不确定在组件状态下更新嵌套对象属性时如何触发useEffect

  16. 16

    如何通过组件将函数作为值分配给Vuex状态下的对象的属性?

  17. 17

    调度不更改Redux状态下的对象

  18. 18

    在Redux状态下更新每个对象中的特定属性

  19. 19

    在状态下访问对象属性时返回null?

  20. 20

    在数组状态下更新属性对象reactJS

  21. 21

    如何在CSS的禁用状态下更改不透明度

  22. 22

    如何在禁用状态下更改组合框的前景?

  23. 23

    在docker中,如何在运行状态下更改共享文件夹

  24. 24

    如何使用嵌套对象更改状态挂钩?

  25. 25

    如何在不同状态下访问DOM中<a>的'href'属性?

  26. 26

    如何在休眠状态下通过ArrayList保存多个对象?

  27. 27

    在React挂钩中更改处理程序

  28. 28

    更新React挂钩中的嵌套对象

  29. 29

    在React挂钩中切换对象状态内的值的正确方法是什么?

热门标签

归档