Reactのステートフルコンポーネントとステートレスコンポーネントの正確な違いを理解しようとしています。ステートレスコンポーネントは何かをするだけですが、何も覚えていないのに対し、ステートフルコンポーネントは同じことをするかもしれませんが、this.state
。それが理論です。
しかし、今、コードを使用してこれを表示する方法を確認すると、違いを作るのに少し苦労しています。次の2つの例は正しいですか?唯一の違いは、実際にgetInitialState
関数の定義です。
ステートレスコンポーネントの例:
var React = require('react');
var Header = React.createClass({
render: function() {
return(
<img src={'mypicture.png'} />
);
}
});
module.exports = Header;
ステートフルコンポーネントの例:
var React = require('react');
var Header = React.createClass({
getInitialState: function() {
return {
someVariable: "I remember something"
};
},
render: function() {
return(
<img src={'mypicture.png'} />
);
}
});
module.exports = Header;
はい、それは違いのようなものです。 statefulコンポーネントを除き、change状態を使用できます。たとえば、this.setState
を使用します。
var React = require('react');
var Header = React.createClass({
getInitialState: function() {
return {
imageSource: "mypicture.png"
};
},
changeImage: function() {
this.setState({imageSource: "differentpicture.png"});
},
render: function() {
return(
<img src={this.state.imageSource} onClick={this.changeImage.bind(this)} />
);
}
});
module.exports = Header;
そのため、上記の例では、changeImage
managesコンポーネントの状態(すべての子/依存コンポーネントも再レンダリングされます)。
アプリケーションのどこかで、データをバインドするか、物事を覚える必要があります。ステートレスコンポーネントは馬鹿げており(それは良いことです)、記憶できず、UIの他の部分にコンテキストを与えることもできません。ステートフルコンポーネントは、必要なコンテキストglueを提供します。
一方、ステートレスコンポーネントはコンテキストを渡すだけです(通常はthis.props
を介して:
var React = require('react');
var Header = React.createClass({
render: function() {
return(
<img src={this.props.imageSource} />
);
}
});
ReactDOM.render(<Header imageSource="myImage.png"/>, document.body);
上記の例では、render
の間に、imageSource
が属性として渡され、ステートレスコンポーネントthis.props
オブジェクトに追加されることがわかります。
機能コンポーネントまたはステートレスコンポーネント
- 機能コンポーネントは、JavaScriptの純粋な機能に似ています。
- 機能コンポーネントは、ステートレスコンポーネントとも呼ばれます。
- 機能コンポーネントは親コンポーネントからのみ小道具を受け取り、JSX要素を返します。
- 機能コンポーネントは、React=.
クラスコンポーネントまたはステートフルコンポーネント
- Reactクラスコンポーネントは、ステートフルコンポーネントとして呼び出されます。
- ステートフルコンポーネントは、Reactのすべてのライフサイクルメソッドで機能します。
- このコンポーネントは状態を変更します。
それが大きな違いです
JavaScriptの純粋な機能に関する知識がある場合は、機能コンポーネントまたはステートレスコンポーネントを簡単に理解できます。
簡単な定義では、次のように説明できます。
コンポーネントの動作がコンポーネントの状態に依存している場合、そのコンポーネントはステートフルコンポーネントと呼ばれ、動作がその状態に依存しない場合は、ステートレスコンポーネントになります。
何かが「ステートフル」である場合、アプリ/コンポーネントの状態に関する情報をメモリに保存する中心点です。何かが「ステートレス」の場合、内部状態を計算しますが、直接変更することはありません。
ステートレスコンポーネントは、ダムコンポーネントと呼ばれることもあります
ステートフルコンポーネントに対するステートレスの主な利点は、スケーラビリティと再利用性です。
これで、@ Davin Tryon Answerのサンプルコンポーネントを確認できます。