私はReactアプリケーションの作成にいくつか問題があります。コンポーネントコンポーネントクラスの外側にあるコンポーネント更新の反応を
import React from 'react';
const VIEW_MAIN = 0;
const VIEW_SUB = 1;
const VIEWS = {};
VIEWS[VIEW_MAIN] = (<ViewMain someProps={...} />);
VIEWS[VIEW_SUB] = (<ViewSub someProps={...} />);
const AppContent = React.createClass({
render() {
let renderDOM = null;
if(this.props.view === VIEW_MAIN) {
renderDOM = VIEWS[VIEW_MAIN];
}
else {
renderDOM = VIEWS[VIEW_SUB];
}
return (
<div id="ViewContainer">
{renderDOM}
</div>
);
}
});
あなたが "VIEWS" 定数変数が2つのビュー、VIEW_MAINとVIEW_SUBが含まれていることを見ることができます:ここで問題です。各ビューはReact Componentです。
両方のコンポーネントのプロパティは「someProps」と同じです。さて、これが問題です。 "AppContent"コンポーネントのプロパティを2つのReactコンポーネントの両方に追加したいのですが、もちろんクラス定義の外にあるため不可能です。
クラス定義に移動すると、問題はどこに置くべきか分かりません。私は "レンダリング"メソッドの中に入れるべきですか?レンダリングメソッドは何度も実行されるので、それは悪い考えです。
createClassを使用する代わりに "class"キーワードを使用すると、定義された "VIEWS"定数変数コードがコンストラクタ関数(コンストラクタ())の内部にある場合でも可能です。
私は一時的にこのようなコードを入力:
const AppContent = React.createClass({
_initViews() {
if(typeof this.VIEWS === 'undefined') {
this.VIEWS = {};
this.VIEWS[VIEW_MAIN] = (<ViewMain someProps={this.props.some} />);
this.VIEWS[VIEW_SUB] = (<ViewSub someProps={this.props.some} />);
},
render() {
this._initViews();
...
}
});
を、私はクラスの中_initialViews
方法を追加し、呼び出しをレンダリングするときにそれを実行します。それはうまく動作しますが、問題は、レンダリングAppContent
コンポーネントで常に "_initViews"メソッドを実行しています。私は一度だけ実行したいと思うし、そのような反応を使うのは悪い考えだと思う。
Classキーワードを代わりに使用する必要がありますか?私が聞いたように、Reactの中には "setProps"メソッドがありますが、現在は非推奨です。また、setPropsメソッドを使うのは悪い考えです。
私は何を試していますか?それがあれば、それは私にアドバイスをいただきありがとうございます。
良い解決に感謝します! – modernator