我在反应原生的项目中工作,我不太了解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
答案 0 :(得分:0)
请阅读react-addons-update
文档。你希望你的reducer案例看起来像这样:
return update(state, {
lines: {$splice: [[action.payload.index, 1, action.payload.cant]]}
});
但请注意,action.payload.cant
必须是您要替换的整个对象。所以要么通过它,要么事先从状态中获取它。