ReactはFluxアーキテクチャを使用しており、それは https://reactjs.org/docs/thinking-in-react.html に記載されていますReactには2つのモデルがあります-state
とprops
。そしてReact https://reactjs.org/community/model-management.html -しかし、これらすべてはFluxを強化するためのいくつかの追加レイヤーのようです。私が回答を求めている大きな質問は次のとおりです。
state/props
の属性として直接定義します2)Customerの属性をstate.customer/props.customer
の属性として定義します。 3)JavaScriptテンプレート/クラスCustomer
を個別に定義し、state.customer/props.customer
のタイプはCustomer
であり、state/props
で属性を繰り返さないようにしてください。 3)は正しいアプローチだと思いますね。Customer
テンプレートをどのように定義し、state.customer/props.customer
がこのテンプレートであることをどのように定義できますか?これらのテンプレートは、いくつかのシリアル化、いくつかのモデル検証タスクでも使用でき、ReactNativeプロジェクトでも使用できます。最も基本的な方法を次のスニペットに示します。
const Customer = ({ name, age }) => (
<div>
<p>Name: {name}</p>
<p>Age: {age}</p>
</div>
);
const App = () =>
[{ name: "Bert", age: 22 }, { name: "Alfons", age: 45 }].map(
({ name, age }, i) => (
<>
<Customer key={i} name={name} age={age} />
<hr />
</>
)
);
これらの小道具をどこに定義するかは、どこに必要かによって異なります。 1つのコンポーネントのみが小道具を必要とする場合、そのコンポーネントの状態でそれらを定義します。しかし、多くの場合、いくつかのコンポーネントで小道具が必要になるため、あなたは 階層内でそれらを持ち上げます です。その結果、非常に「スマート」なコンポーネント(状態の大きいコンポーネント)が生成されることがよくあります。
アプリが大きくなって混乱する場合は、状態を外部に保存することをお勧めします。これを行うには、 react context を使用できます。階層内のいくつかのレイヤーに渡すのではなく、それを必要とするコンポーネントに小道具を注入することができます。
独自のコンテキストを記述したくない場合は、 redux または mobx のような状態管理ソリューションを使用できます。これらもコンテキストを使用しますが、コンポーネントを外部状態に簡単に接続するための便利な機能を提供します。