【发布时间】:2017-11-06 18:09:32
【问题描述】:
我在一个 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) 但没有成功
有什么想法吗?
非常感谢!我希望它能理解我的解释。
摇滚乐
【问题讨论】:
-
注意到
lines是一个数组,但是在你的reducer 中你把它当作一个对象来对待。 -
你能说明你是如何尝试使用
_.debounce -
您是否使用地图创建输入?问题可能是由于组件的重新渲染。由于道具正在改变,它会触发重新渲染,如果您没有使用
key道具,可能会导致输入失去焦点。 -
是的。我知道@RickJolly。我读了那个解决方案stackoverflow.com/questions/35628774/…。我尝试了您的解决方案,但它给出了一个错误“您提供了一个不包含 $push、$unshift、...之一的更新()的关键路径”。感谢您的回复;)
-
@Aaqib 我试过这个例子stackoverflow.com/a/41215941/4774393 debounce 工作正常,但在函数 onChangeText(text) 无法访问 this.props..cause is undefined ...我不知道为什么 ..:( ..thanx 回复 ;)
标签: javascript reactjs react-native redux debounce