如何在React.js中更新状态对象中单个属性的值?

时间:2017-04-27 12:00:45

标签: javascript reactjs state

所以我有以下对象结构:

const SamplePalette = {
  id: 1,
  name: "Sample Palette",
  description: "this is a short description",
  swatches: [
    { 
      val: "#FF6245",
      tints: ["#FFE0DB", "#FFA797"],
      shades: ["#751408", "#C33F27"]
    },
    {
      val: "#FFFDA4",
      tints: ["#FFFFE1"],
      shades: ["#CCCB83"]
    },
    {
      val: "#BFE8A3",
      tints: ["#E7FFD7"],
      shades: ["#95B77E"]
    }
  ]
}

让我们假设这个对象由我的应用程序状态管理,如下所示:

this.state = {
  currentPalette: SamplePalette,
}

我的问题是如何更新val数组中给定样本对象的swatches属性?或者更一般地说 - 我如何仅更新此对象的片段?

我尝试使用update帮助器以及弄清Object.assign()如何工作,但是我没有成功,坦率地说只是看一下例子就不能理解语法。

另外,由于我要修改这个对象,我应该考虑使用Redux吗?

[编辑]

我尝试了@ maxim.sh建议,但没有成功:

this.setState(
     { currentPalette: {...this.state.currentPalette, 
         swatches[0].val: newValue}
      })

1 个答案:

答案 0 :(得分:0)

考虑您有新的false

我认为更清晰的方法是获取数组,更新它并放回:

<DataGrid Name="DataGridView" Style="{DynamicResource Datag1}" Margin="0,105,0,0"  FontSize="15" CanUserSortColumns="True"
                      Background="Azure" RowBackground="Aqua" AlternatingRowBackground="DarkGray" ColumnHeaderHeight="45" Foreground="Brown"
                      CanUserAddRows="False" CanUserDeleteRows="False" CanUserResizeColumns="True" CanUserReorderColumns="False" BorderBrush="Black"
                    AutoGenerateColumns="False">
    <DataGrid.Columns>
        <DataGridTextColumn Header="slpos" Binding="{Binding slpos}" Width="20" />
        <!-- and so on for each column...-->
    </DataGrid.Columns>
</DataGrid>

您还拥有:Immutability Helpershttps://github.com/kolodny/immutability-helper

可用命令

new_swatches