Хранить данные, полученные из Store, в представлении контроллера или нет?

Согласно документам React, состояния следует использовать только для состояния пользовательского интерфейса, поэтому возникает путаница, являются ли данные, полученные из Store, состоянием пользовательского интерфейса или нет.

Допустим, мы получили список предметов из Магазина и его нужно отрендерить в компонент. Должно ли это быть:

  1. Хранится как состояние
  2. Хранится в свойстве компонента (требуется forceUpdate)

Я также могу думать о том, что данные извлекаются из Store в методе render, это вообще не требует хранения данных внутри компонента, но все же требует вызова forceUpdate при изменении Store.


person Roman Liutikov    schedule 26.01.2015    source источник


Ответы (1)


С архитектурой Flux поток является однонаправленным, что в конечном итоге означает, что представления никогда не будут обновлять хранилище напрямую. Магазин предоставляет состояние для ваших представлений. Если вы пытаетесь добавить, удалить, обновить или удалить данные из своих представлений, вы вызовете действие, которое будет отправлено в ваши магазины. Затем ваши магазины будут получать отправляемые данные, что-то делать с этими данными и генерировать событие «изменение». Все просмотры, подписанные на магазин, будут соответствующим образом обновлены. Например, это вид.

var Events = React.createClass({
  getInitialState: function() {
    this.store = this.props.context.getStore('EventStore');
    return this.store.getState();
  },

  componentDidMount: function() {
    this.store.addChangeListener(this._setState);
  },

  componentWillUnmount: function () {
    this.store.removeListener('change', this._setState);
  },

  _setState: function () {
    this.setState(this.store.getState());
  }
});

Вы можете следовать этому руководству (http://facebook.github.io/flux/docs/todo-list.html), чтобы лучше понять, но ключ и непосредственное преимущество использования такой архитектуры, как FLUX, заключается в однонаправленном потоке.

person TYRONEMICHAEL    schedule 26.01.2015
comment
Это вопрос не о том, как работает Flux, а об эффективном способе обработки данных, полученных из хранилища. - person Roman Liutikov; 26.01.2015
comment
И это именно то, что я пытаюсь показать вам здесь. Получить свое состояние, когда компонент монтируется, и получить его снова, когда хранилище выдает событие изменения? Что именно вы подразумеваете под эффективным способом извлечения данных из хранилища? Вам не нужно извлекать его каким-либо другим способом при использовании хранилищ и компонентов React. И меня смущает, почему вы извлекаете состояние из своего хранилища в методе рендеринга. Когда вы вызываете setState, ваш компонент автоматически перерисовывается. - person TYRONEMICHAEL; 26.01.2015
comment
Дело здесь в том, чтобы не хранить данные приложения в состоянии компонента, а вместо этого отображать их немедленно. Состояние представляет пользовательский интерфейс, но не данные приложения. Лучше всего хранить как можно меньше данных в состоянии, это хорошо влияет на производительность. - person Roman Liutikov; 26.01.2015