Не удается обновить входное значение внутри определенного элемента массива в избыточном
Я работаю в реактивном проекте и не очень хорошо понимаю Redux. Мне нужна помощь. Мы получили массив объектов, таких как:
lines[
{"cant":2, "ref":"bar"}, {"cant":5, "ref":"foo"}
]
Каждая строка - это информация о карте. Эти карты имеют входы (не могу, 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});
}}
/>
Между тем в редукторе (мы используем response-addons-update):
case ON_CHANGE_CANT:
return update(state, {
lineas: {
[action.payload.index]: {
cant: {$set: action.payload.cant}
}
}
});
Все в порядке, за исключением того, что обновляет только один символ. Например: Cant: 1. Тогда фокус ввода отсутствует. Если вы печатаете: не могу: 22. только он обновляет 2. Не важно, печатает ли он быстрее. Обновляйте только первый введенный символ. Мы подозреваем, что проблема в поведении Redux, но мы не знаем почему.
Мы пытались использовать debounce(lodash), но нам не удалось
Любая идея, пожалуйста?
Спасибо вам большое! и я надеюсь, что это понимает мое объяснение.
Rockandbit
1 ответ
Просто прочитайте react-addons-update
Docs. Вы бы хотели, чтобы ваш корпус редуктора выглядел примерно так:
return update(state, {
lines: {$splice: [[action.payload.index, 1, action.payload.cant]]}
});
Но учтите, что action.payload.cant
должен быть весь объект, который вы хотели бы заменить. Так что либо передайте это, либо заберите это у государства заранее.