Не удается обновить входное значение внутри определенного элемента массива в избыточном

Я работаю в реактивном проекте и не очень хорошо понимаю 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 должен быть весь объект, который вы хотели бы заменить. Так что либо передайте это, либо заберите это у государства заранее.

Другие вопросы по тегам