反応還元剤の成分と容器の違いは何ですか?
Component
name__はReact APIの一部です。コンポーネントはReact UIの一部を記述するクラスまたは関数です。
コンテナは、reduxストアにconnect
nameされたReactコンポーネントの非公式の用語です。コンテナはReduxの状態更新とdispatch
name__アクションを受け取り、通常DOM要素をレンダリングしません。彼らはプレゼンテーショナルの子コンポーネントにレンダリングを委任します。
詳細については、 プレゼンテーションとコンテナーのコンポーネントとの対比 Dan Abramovによる。
データの取得と表示を担当するコンポーネントは、スマートコンポーネントまたはコンテナコンポーネントと呼ばれます。データはredux、ネットワークコール、またはサードパーティのサブスクリプションから取得できます。
ダム/プレゼンテーションコンポーネントは、受け取った小道具に基づいて意見を提示する責任があるコンポーネントです。
例を使った良い記事はこちら
https://www.cronj.com/blog/difference-container-component-react-js/
コンポーネントはビューのピアスを構成するので、DOM要素をレンダリングし、画面にコンテンツを配置します。
コンテナーはデータの作成に参加するので、状態を変更する必要があるため、reduxと「対話する」必要があります。それで、あなたはconnect(react-redux)それが接続するもの、そして関数mapStateToPropsとmapDispatchToPropsを含めるべきです:
.
.
.
import { connect } from "react-redux";
class myContainer extends Component {
}
function mapStateToProps(state) {
// You return what it will show up as props of myContainer
return {
property: this.state.property
};
}
function mapDispatchToProps(dispatch) {
// Whenever property is called, it should be passed to all reducers
return bindActionCreators({ property: property }, dispatch);
}
export default connect(mapStateToProps, mapDispatchToProps)(myContainer);
両方ともコンポーネントです。コンテナは機能的なので、HTMLを独自にレンダリングすることはありません。それから、実際のHTMLを記述するためのプレゼンテーションコンポーネントもあります。コンテナーの目的は、状態とディスパッチを表示コンポーネントの小道具にマップすることです。
続きを読む: Link
実際のところ、Reduxは独立したライブラリです。
ReactはHTML文書を作成するためのフレームワークを提供します。コンポーネントはある意味でドキュメントの特定の部分を表しています。コンポーネントに関連付けられているメソッドは、ドキュメントの特定の部分を操作できます。
Reduxは、JS環境でデータを保存および管理するための特定の理念を規定したフレームワークです。これは、特定のメソッドが定義された1つの大きなJSオブジェクトです。最良の使用例は、Webアプリケーションの状態管理という形です。
Reactはすべてのデータをルートからリーフに流すように規定しているので、すべてのプロップをメインにし、コンポーネントでプロップを定義してから、特定のプロップにプロップを渡すことは面倒になります。また、アプリケーション全体の状態を脆弱にします。
React Reduxは、接続されているコンポーネントを別のReactコンポーネント(あなたのContainer
)の周りにラップするだけで、ユーザーをReduxストアに直接接続する、クリーンなソリューションを提供します。あなたの実装では、あなたの実装はあなたが既に必要としている全体のアプリケーション状態のどの部分を定義しています。そのためconnect
はそのデータを格納場所から取り出し、それを囲むコンポーネントにそれを小道具として渡します。
この簡単な例を見てください。
class Person extends Component {
constructor(props){
this.name = this.props.name;
this.type = this.props.type;
}
render() {
return <p> My name is {this.name}. I am a doctor { this.type } </p>
}
}
const connect = InnerComponent => {
class A extends Component{
render() {
return <InnerComponent {...this.props} type="Doctor"/>
}
}
A.displayName = `Connect(${InnerComponent.displayName})`
return A
}
connect
関数はプロップtype
を渡します。
このように、connectはPersonコンポーネントのコンテナとして機能します。
Reactには2つの主要コンポーネントがあります。1つはスマートコンポーネント(コンテナ)で、もう1つはダム(プレゼンテーションコンポーネント)です。コンテナはコンポーネントと非常によく似ていますが、唯一の違いはコンテナがアプリケーションの状態を認識していることです。あなたのWebページの一部がデータを表示するためだけに使われている場合(ダム)、それをコンポーネントにしてください。賢く、アプリケーションの状態を(データが変わるたびに)認識する必要がある場合は、それをコンテナにします。