Какова общая практика установки начального состояния приложения с изоморфными приложениями? Без Flux я бы просто использовал что-то вроде:
var props = { }; // initial state
var html = React.renderToString(MyComponent(props);
Затем визуализируйте эту разметку через express-handlebars и отобразите ее с помощью {{{reactMarkup}}
.
На стороне клиента, чтобы установить начальное состояние, я сделал бы что-то вроде этого:
if (typeof window !== 'undefined') {
var props = JSON.parse(document.getElementById('props').innerHTML);
React.render(MyComponent(props), document.getElementById('reactMarkup'));
}
Итак, да, в основном вы устанавливаете состояние дважды, на сервере и клиенте, однако React будет сравнивать различия и в большинстве случаев, поэтому это не повлияет на производительность путем повторной рендеринга.
Как этот принцип будет работать, когда у вас есть действия и магазины в архитектуре Flux? Внутри моего компонента я мог сделать:
getInitialState: function() {
return AppStore.getAppState();
}
Но как установить начальное состояние в AppStore с сервера? Если я использую React.renderToString
без переданных свойств, он вызовет AppStore.getAppState()
, у которого ничего не будет, потому что я все еще не понимаю, как установить состояние в моем хранилище на сервере?
Обновление 5 февраля 2015 г.
Я все еще ищу чистое решение, которое не связано с использованием сторонних реализаций Flux, таких как Fluxible, Fluxxor, Reflux.
Обновление 19 августа 2016 г.
Используйте Redux.