私は、状態ディスパッチ/サブスクライブ ロジックが React の「フロー」から分離されている (つまり、React-Redux バインディングのようなヘルパーがない) 単一オブジェクトの状態駆動型アプリケーションを持っています。
状態が変わると、アプリが再レンダリングされます。
次の 2 つの実装に違いはありますか、またはアンチパターンの問題はありますか? (私がJSXを使用していないことに腹を立てている人には申し訳ありません)
var myElementClass = React.createClass(
render : function() {
//make use of this.props.state...
}
);
var myAppContainerComponent = React.createElement(
myElementClass,
{state : dataStore.getState()}
);
dataStore.onChange(function(){
ReactDOM.render(myAppContainerComponent, someDOMContainer);
});
対...
var myElementClass = React.createClass(
componentDidMount : function() {
var self = this;
this.props.store.onChange(function(){
self.setState(self.props.store.getState());
});
},
render : function() {
//make use of this.state...
}
);
var myAppContainerComponent = React.createElement(
myElementClass,
{store : dataStore}
);
ReactDOM.render(myAppContainerComponent, someDOMContainer);
1 つ目は、「外部」から、つまり ReactDOM を使用して、アプリ全体の再レンダリングを強制します。2 つ目は、コンテナー アプリ内で同じことを行います。
いくつかのパフォーマンス テストを行いましたが、実際には違いは見られません。今後問題が発生することはありますか? ReactDOM.render() を何度も叩くのは問題ですか?
アプリ全体をそれぞれ再レンダリングしているため、両方の方法がおそらく高価であるとコメントする人もいると思いますが(Reactの目的ではありません;))、それはこの質問の範囲外です。