Ответ 1
Вы должны попробовать MobX
MobX - это библиотека управления состоянием, которая использует преимущества декораторов и удаляет нежелательный код. Например, в mobx нет концепции reducers
.
Надеюсь это поможет!
Недавно я начал изучать React, и я быстро столкнулся с проблемой раздутого родительского компонента, полного функций и состояний. Сначала я посмотрел на Flux, а затем посмотрел на Redux, но оба они казались действительно передовыми решениями.
Мне интересно, почему что-то вроде этого не сделано:
//EventPropagator.js
let EventPropagator = {
registerListener(listenerObject){
if (this.listeners == null)
this.listeners = []
this.listeners.push(listenerObject)
},
fireEvent(eventObject){
let listenerList = this.listeners.filter(function(listener){
return listener.eventType === eventObject.eventType
})
listenerList.forEach((listener) => {
listener.callback(eventObject.payload)
})
}
}
export default EventPropagator
Чтобы использовать: компоненты просто registerListener
и fireEvent
:
//main.js
import EventPropagator from './events/EventPropagator'
EventPropagator.registerListener({
"eventType": "carry_coconut",
"callback": (payload) => {
// actually carry coconut
this.setState({"swallow_type": payload.swallow})
console.log(payload)
}
})
EventPropagator.fireEvent({
"eventType": "carry_coconut",
"payload": { "swallow": "african" }
})
Это позволит много развязки, и состояние может быть легко передано с помощью такого рода событий. Каковы недостатки этого подхода?
Вы должны попробовать MobX
MobX - это библиотека управления состоянием, которая использует преимущества декораторов и удаляет нежелательный код. Например, в mobx нет концепции reducers
.
Надеюсь это поможет!
Существует Reactn
основанный на Reactn
.
Это на несколько порядков проще в использовании, по сравнению с Redux. Проверьте https://www.npmjs.com/package/reactn и прочитайте блог Stover.
Redux является продолжением стиля декларативного программирования React. Простым способом сопоставления вашей логики приложения с компонентами является использование чего-то вроде Backbone.React.Component, но с использованием redux позволит вам использовать все инструмента и промежуточного продукта. Кроме того, неопределенные переходы в приложениях делают отладку намного проще. Теперь я согласен с тем, что вам нужно много проводников и шаблонов, чтобы получить все равно.
Если вы хотите использовать redux, вы можете посмотреть что-то вроде redux-auto
Redux-auto: Redux упростил (с подходом plug and play)
Удаление кода шаблона при настройке хранилища и действий. Зачем? Эта утилита позволяет вам запускать и запускать Rudux за небольшую часть времени!
Теперь вы можете увидеть redux-auto: проект helloworld
Если вы хотите воспользоваться всеми преимуществами Redux, используйте Redux.
Если вы хотите сохранить синхронизацию между компонентами React, используйте Duix.
Я создатель Duix. Я использую его в течение 1 года, и, наконец, я выпустил его несколько часов назад. Проверьте документ: https://www.npmjs.com/package/duix
Требуется система, управляемая событиями, поэтому дочерний компонент может говорить со своим родным братом, но это не означает, что данные должны передаваться в качестве полезной нагрузки событий. Это приведет к созданию системы управления и кошмара для проекта, в котором над ним работают несколько разработчиков.
До тех пор, пока вы будете следовать шаблону архитектуры, подобному потоку (google it), вы действительно можете сделать это успешно с помощью только объектов javascript и Javascript для хранения данных вместе с системой событий.
Данные следует рассматривать как одно из трех разных состояний. Это либо
Если вы пишете библиотеку javascript, чтобы обрабатывать перемещение данных между тремя состояниями и обрабатывать преобразования, вы можете использовать систему событий для запуска события "смены магазина", которое компоненты могут прослушивать и выполнять самостоятельно. p >
https://github.com/deepakpatil84/pure-data Примечание: я являюсь автором этого
Использование вашего EventPropagator решает проблему связи, но не обрабатывает целостность данных. Например, если более двух компонентов прослушивают одно и то же событие и используют полезную нагрузку этого события для обновления своих собственных состояний. Чем больше компонентов прослушивают одни и те же события, тем сложнее убедиться, что все эти компоненты имеют одинаковые данные в своих собственных состояниях.
Во-вторых, Flux/Redux обеспечивает однонаправленный поток данных. Простым примером может быть около 2 компонентов A и B, потребляющих одни и те же данные X из внешнего источника (API или хранилище). Пользователь может взаимодействовать с любым из них, чтобы получить последние данные X. Теперь, если пользователь просит B обновить X, у нас есть два решения с вашим EventPropagator:
Когда количество компонентов увеличится, а связь не будет ограничена только A & B, вам может потребоваться придерживаться только одного из этих двух решений, чтобы не допустить сбоев в логике вашего приложения. Flux/Redux выбирает второе, и мы довольны этим.
Если вы действительно не думаете, что вам нужна еще одна библиотека для управления данными, вам стоит взглянуть на новейшую функцию React: Context. Он предоставляет наиболее важные функции, которые может иметь библиотека управления данными, и это только React. Отмечено, что вы должны обновить версию своего проекта React до 16.3, чтобы использовать эту функцию.
Еще одна скромная альтернатива для нескольких магазинов - response-scopes
Вот некоторые особенности: