0

我在一个 react-native projetc 工作,我不太了解 Redux。我需要帮助。:D 我们得到了一个对象数组,例如:

lines[
    {"cant":2, "ref":"bar"}, {"cant":5, "ref":"foo"}
]

每一行都是一张卡片信息。这些卡片有输入(cant, ref)来改变它的值。整个对象是:

obj:{
  "a": '',
  "b": '',
  "lines": [
    {"cant":2, "ref":"bar}",
    {"cant":5, "ref":"foo"}
  ]
}

当用户在某些输入中插入一些值时,它调用 onChangeText()。

    <Input
        placeholder="Cant"
        value={this.props.newOrder.lines[index].cant}
        onChangeText={(text)=> {
            this.props.onChangeCant({"cant":text,"index":index});
        }}
    />

同时在 Reducer 中(我们使用react-addons-update):

case ON_CHANGE_CANT:
        return update(state, {
          lineas: {
            [action.payload.index]: {
              cant: {$set: action.payload.cant}
            }
          }
        });

一切都很好,只是它只更新了一个字符。例如: Cant: 1.那么输入焦点丢失。如果您键入: Cant: 22。只有它更新2。打字快没关系。仅更新您输入的第一个字符。我们怀疑 Redux 的行为是问题所在,但我们不知道为什么。

我们尝试使用 debounce(lodash) 但我们没有成功

请问有什么想法吗?

太感谢了!我希望它理解我的解释。

摇滚比特

4

1 回答 1

0

只需阅读react-addons-update文档。您希望您的减速机外壳看起来像这样:

return update(state, {
    lines: {$splice: [[action.payload.index, 1, action.payload.cant]]}
});

但请注意,action.payload.cant这必须是您要替换的整个对象。因此,要么通过它,要么事先从州获得它。

于 2017-11-07T16:50:12.093 回答