在地图中更新地图

时间:2016-11-22 18:14:49

标签: immutable.js

我在Map对象中有一个不可变的map对象,如下所示:

let initialState = Immutable.fromJS({errors:{}});

如何更新错误Map以添加和删除条目?

例如:

自:

Immutable.fromJS({errors:{}})

要:

Immutable.fromJS({errors:{"foo":"My foo error"}})

要:

Immutable.fromJS({errors:{"foo":"My foo error", "baz": "A baz error"}})

要:

Immutable.fromJS({errors:{"baz": "A baz error"}})

1 个答案:

答案 0 :(得分:1)

您可以使用setIndeleteIn

<TextBox x:Name="textBox" HorizontalAlignment="Left" Height="23" Margin="145,40,0,0" TextWrapping="Wrap"  VerticalAlignment="Top" Width="120">
    <TextBox.Text>
        <Binding Path="Test1" UpdateSourceTrigger="PropertyChanged">
            <Binding.ValidationRules>
                <val:StringToIntValidationRule ValidationStep="RawProposedValue"/>
            </Binding.ValidationRules>
        </Binding>
    </TextBox.Text>
    <Validation.ErrorTemplate>
        <ControlTemplate>
            <Grid>
                <Grid.RowDefinitions>
                    <RowDefinition />
                </Grid.RowDefinitions>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition />
                    <ColumnDefinition Width="Auto" />
                </Grid.ColumnDefinitions>

                <AdornedElementPlaceholder Grid.Column="0" Grid.Row="0" x:Name="textBox"/>
                <TextBlock Grid.Column="1" Grid.Row="0" Text="{Binding [0].ErrorContent}" Foreground="Red"/>
            </Grid>
        </ControlTemplate>
    </Validation.ErrorTemplate>
</TextBox>

输出:

const initialState = Immutable.fromJS({errors:{}});
const nextState = initialState.setIn(['errors', 'foo'], 'bar').setIn(['errors', 'bar'], 'a bar error');
console.log(nextState.toJS());
const finalState = nextState.deleteIn(['errors', 'bar]);
console.log(finalState.toJS());

```