#javascript #reactjs #immutable.js
#javascript #reactjs #immutable.js
Вопрос:
Я хочу запускать функцию всякий раз, когда создается новый объект ImmutableJS. Я хочу использовать объект ImmutableJS в качестве состояния моего приложения React, и я хочу сократить шаблонный код.
Вот часть того, что у меня есть сейчас:
function addTodo(text) {
let state = store.getState(); // Gets ImmutableJS object.
let todos = state.get('todos');
let newState = state.set('todos', todos.push('text'));
store.update(newState); // Triggers rerender.
}
Вот на что я хочу, чтобы это было похоже:
function addTodo(text) {
let state = store.getState(); // Gets ImmutableJS object.
state.get('todos').push(text); // Store listens to change and replaces the current state with the newly created state. Store automatically triggers rerender.
}
Возможно ли это?
Я попытался обернуть все addTodo
withMutations
, но withMutations
допускает только мелкие мутации.
Комментарии:
1. Разве суть ImmutableJS не в том, что вы не хотите использовать изменяемые объекты? Как насчет добавления функции более высокого порядка, если вы хотите сократить шаблонный код?
2. Я хочу, чтобы он был неизменяемым для
shouldUpdateComponent
. Как в этом случае помогут функции более высокого порядка? Вы имеете в виду передачу состояния вaddTodo
качестве аргумента и возврат нового состояния? Я мог бы обновлять состояние несколько раз в одной функции, и мне все равно пришлось бы вызыватьstate.set
несколько раз.3. посмотрите на github.com/reactjs/redux обрабатывать состояние приложения reactjs, а затем сохранять состояние как неизменяемые объекты для ускорения
shouldUpdateComponent
. Я уже выполнил несколько проектов с этим. Redux будет обрабатывать уведомления для ваших компонентов об изменении состояния.
Ответ №1:
Согласен с комментарием Лукаса. Это действительно то, для чего нужен Redux. Вы изменяете состояние своих хранилищ, и это приведет к повторному отображению дерева (ов) ваших компонентов с новыми значениями.
Я не знаю ни о каких наблюдаемых функциях в Immutable.js однако сама по себе может существовать библиотека третьей части, которая обладает такой функциональностью.
Комментарии:
1. Редукторы Redux — это просто методы ImmutableJS. Состояние (текущий объект ImmutableJS) действие (имя и аргументы метода ImmutableJS) -> новое состояние (новый объект ImmutableJS). В настоящее время я играю с Cortex и Baobab.