Прослушивание изменений ImmutableJS?

#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.