Ответ 1
Это должно работать
initialState.updateIn(['foo', 'bar'], arr => arr.push(4))
Рекомендации:
Предположим, что есть объект:
const object = {
'foo': {
'bar': [1, 2, 3]
}
}
Мне нужно нажать 4
в массив object.foo.bar
.
Сейчас я делаю так:
const initialState = Immutable.fromJS(object)
const newState = initialState.setIn(
['foo', 'bar', object.foo.bar.length],
4
)
console.log(newState.toJS())
Но мне это не очень нравится, так как мне нужно использовать object.foo.bar.length
в пути. В моем реальном примере объект вложен гораздо глубже, а длина массива выглядит очень уродливо. Есть ли другой, более удобный способ?
Это должно работать
initialState.updateIn(['foo', 'bar'], arr => arr.push(4))
Рекомендации:
Я использую seamless-immutable
, когда добавляю новый элемент в массив вложенного объекта, я получил эту ошибку:
Метод push не может быть вызван в неизменяемой структуре данных.
У моего массива все еще есть метод push
, но он не работает. Вместо этого используется решение concat, более подробная информация о # 43:
initialState.updateIn(['foo', 'bar'], arr => arr.concat([4]));
Надеюсь на эту помощь!