reactjs - immer.js 合并嵌套对象

标签 reactjs immer.js

我想使用 immer.js 合并嵌套对象

合并两个嵌套对象总是很困难。
我想知道以下内容是否适用于任何库..

state = {
  lv1_1: {
    lv2_1: {
      lv3_1: 'foo1',
      lv3_2: 'foo2',
    },
    lv2_2: {
      lv3_2: 'foo2'
    }
  },
  lv1_2: {
    lv2_1: 'foo'
  }
}



lv1_1 = {
  lv2_1: {
    lv3_1: 'bar'
  }
}

将 lv1_1 与状态合并,我想要以下输出。

state = {
  lv1_1: {
    lv2_1: {
      lv3_1: 'bar',
      lv3_2: 'foo2',
    },
    lv2_2: {
      lv3_2: 'foo2'
    }
  },
  lv1_2: {
    lv2_1: 'foo'
  }

}

我尝试了 immerse.js 但以下代码 draft.lv1_1 = {...draft.lv1_1, ...lv1_1} 似乎给出

state = {
  lv1_1: {
    lv2_1: {
      lv3_1: 'bar'
    }
  }
}

最佳答案

I wonder if the following is possible with any library..

您可以尝试lodash.merge :

const a = {
  lv1_1: {
    lv2_1: {
      lv3_1: 'foo1',
      lv3_2: 'foo2'
    },
    lv2_2: {
      lv3_2: 'foo2'
    }
  },
  lv1_2: {
    lv2_1: 'foo'
  }
};

const b = {
  lv1_1: {
    lv2_1: {
      lv3_1: 'bar'
    }
  }
};
console.log(_.merge(a, b));

关于reactjs - immer.js 合并嵌套对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60797579/

相关文章:

javascript - 访问App组件中的位置属性

angular - 寻找使用 ngrx 8 沉浸式制作的示例

reactjs - useState 和 useImmer 有什么区别?

reactjs - 为什么不能根据 Prop react 设置初始状态

javascript - 如何将 react-leaflet map 定位到用户的当前位置并获取该 map 的边框?

reactjs - jest.fn() 值必须是模拟函数或 spy 接收函数 : [Function getTemplates]

expo - Metro Bundler 尝试从 redux-toolkit 解析模块 `immer` 时失败

javascript - ReactJS setState 仅在嵌套在 setState 中时有效

javascript - 无法使过滤器与 Immer.js 一起使用以删除数组中的嵌套对象

javascript - 为什么 immer.js 不允许在草稿上设置动态属性?