2016-01-25 5 views
2

похоже, что я думаю не в том направлении .. У меня есть приложение-приложение, использующее redux. Теперь у меня есть редуктор, который получает данные с сервера. Для одного компонента мне нужны данные, которые нужно преобразовать, которые я хотел бы сделать в редукторе.Преобразование данных в редукторе Redux

Но если я преобразую данные, он преобразуется для всех подписчиков, не так ли? Итак, можно ли преобразовывать данные в редуктор «на лету», но не сохраняет преобразованные данные в состоянии? (Ну, это звучит как вопрос сбрасывания.)

+0

Действие приведет к извлечению данных и отправке их в хранилище, поскольку хранилище, как вы сказали, является глобальным, но вы можете сохранить эти данные под дополнительным ключом с некоторым уникальным идентификатором для этого экземпляра компонента для использования –

+1

Почему бы просто не сделать преобразование в компонентах, которые хотят преобразования? Если это универсальное преобразование, создайте функцию, которая выполняет преобразование и повторно использует это. –

+0

Подождите .. само действие поместило данные в состояние, и редуктор только уменьшает полное состояние и возвращает малое сокращение, которое необходимо? Таким образом, возвращаемая стоимость редукторов не хранится нигде, а только пересылается подписчикам? – Christian

ответ

2

Часто компонентам нужны специальные данные, которые могут быть получены из состояния хранилища, но не являются состояниями хранилища. Как следует из одного комментария, вы можете просто написать функцию, которая выполняет преобразование, и вызвать ее из компонента. Эти функции иногда называют «селекторами», поскольку они выбирают и преобразуют части состояния. Однако это может вызвать проблемы, поскольку значение будет пересчитываться каждый раз, когда какое-либо состояние изменяется, а так как это производные данные, все в зависимости от него будет повторно отображаться.

Существует библиотека расширений redux, которая обеспечивает решение этой проблемы, позволяя вам эффективно объявлять точные части состояния, от которых зависит ваш селектор. Это означает, что он будет пересчитан только при изменении этих частей, избегая повторной обработки каждой проблемы времени. См: http://rackt.org/redux/docs/recipes/ComputingDerivedData.html и https://github.com/rackt/reselect

Вы можете выбрать, чтобы полностью инкапсулировать магазин состояние, и есть компоненты, только когда доступ к состоянию с помощью селекторов. Это имеет обычную инкапсуляцию и связанные с ней преимущества (например, изолирование ваших компонентов от некоторых повторных факторингов до состояния хранилища).

Смежные вопросы