Javascript 有没有更好的方法使用Spread更新JS中的单个嵌套属性?

Javascript 有没有更好的方法使用Spread更新JS中的单个嵌套属性?,javascript,setstate,ecmascript-2016,spread,Javascript,Setstate,Ecmascript 2016,Spread,我正在尝试使用setState更新一个嵌套很深的配置对象中的单个值,以用于图表库 是否有更好的方法使用排列更新单个值 我必须做以下许多工作: const newValue = 'somevalue' setState({ ...config, chart: { ...config.chart, toolbar: { ...config.chart.toolbar, tools: { ...config.chart.toolbar.tools, value

我正在尝试使用setState更新一个嵌套很深的配置对象中的单个值,以用于图表库

是否有更好的方法使用排列更新单个值

我必须做以下许多工作:

const newValue = 'somevalue'

setState({
 ...config,
 chart: {
  ...config.chart,
  toolbar: {
   ...config.chart.toolbar,
   tools: {
    ...config.chart.toolbar.tools,
    valueIWantToUpdate: newValue
   }
  }
 }
})
基本上我想避免做很多…config.property.property.property,不确定这是否可行


乐意接受其他建议或更好的方法,而不是使用扩展运算符。

如果您想坚持使用扩展运算符,这是设置要更新的对象深层属性的唯一方法。但您可以使用像Lodash这样的库,它有像merge这样的方法,可以帮助您独立于叠层级别合并两个对象

让配置={ 姓名:约翰, 年龄:3岁, 性别:男 图表:{}, 工具栏:{ 名称:toolbar-1, 工具:{ 价值:1 } } } 常数变化={ 图表:{ 姓名:约翰·多伊, s:‘测试’ }, 工具栏:{ 工具:{ 工具集:工具集 } } } 让result=\uux.mergeconfig,change; console.logresult;
谢谢,我已经试过了,但是我认为当你把它放到setConfigresult中时,这个方法不会触发重新渲染。例如设置配置结果。不幸的是,我无法共享代码库,因为它是私有的和其他含义。我认为问题与更新变量的方式无关,无论何时调用更新状态的函数,react trigger de rerender Automatically我使用的是hooks version const[config,setConfig],但无论如何,谢谢,此方法不会触发组件的重新渲染。如果不清楚,很抱歉。请不要只发布代码作为答案,还要解释代码的作用以及它如何解决问题。带有解释的答案通常更有帮助,质量更好,更容易吸引选票。
  setState((prevState) => {
    const updatedState = {...prevState};
    updatedState.config.chart.toolbar.tools.valueIWantToUpdate = newValue;
    return updatedState;
  });