无法在redux

时间:2017-11-06 18:09:33

标签: javascript reactjs react-native redux debounce

我在反应原生的项目中工作,我不太了解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的行为是问题,但我们不知道为什么。

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

请问好吗?

非常感谢你!我希望它理解我的解释。

Rockandbit

1 个答案:

答案 0 :(得分:0)

请阅读react-addons-update文档。你希望你的reducer案例看起来像这样:

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

但请注意,action.payload.cant必须是您要替换的整个对象。所以要么通过它,要么事先从状态中获取它。