[解決済み] Reactのstateとpropsの違いとは?
質問
PluralsightのReactのコースを見ていたら、講師がpropsは変更してはいけないと述べていました。私は今、以下の記事を読んでいます。 記事(uberVU/react-guide) propsとstateの比較で、次のように書かれています。
<ブロッククオートprops と state の両方の変更がレンダーの更新をトリガーします。
記事の後半に書いてあります。
プロップス(プロパティの略)とは、Componentの構成要素のことで、オプションと言ってもよいでしょう。これらは上から受け取ったもので、不変のものです。
- つまり、プロップは変化しても良いが、イミュータブルであるべきということですか?
- どのような場合にpropsを使用し、どのような場合にstateを使用すべきですか?
-
Reactコンポーネントが必要とするデータがある場合、propsを介して渡すか、Reactコンポーネントの中で、以下の方法で設定します。
getInitialState
?
解決方法は?
小道具と状態は関連しています。あるコンポーネントの状態が、子コンポーネントのプロップになることがよくあります。プロップは、親のレンダリングメソッド内で、第2引数に
React.createElement()
または、JSXを使用している場合は、より馴染みのあるタグの属性です。
<MyChild name={this.state.childsName} />
親の状態値である
childsName
は、子プロセスの
this.props.name
. 子から見ると、name propは不変です。もし変更する必要があれば、親はその内部状態を変更すればよいのです。
this.setState({ childsName: 'New name' });
で、Reactがそれを子に伝搬してくれます。当然の疑問として、子プロパティを変更する必要がある場合はどうするのでしょうか?これは通常、子のイベントと親のコールバックを通じて行われます。子は、例えば次のようなイベントを公開するかもしれません。
onNameChanged
. 親は、コールバックハンドラを渡すことで、そのイベントを購読することになります。
<MyChild name={this.state.childsName} onNameChanged={this.handleName} />
子プロセスは、要求された新しい名前をイベントコールバックの引数として渡します。
this.props.onNameChanged('New name')
親はイベントハンドラでその名前を使用して状態を更新します。
handleName: function(newName) {
this.setState({ childsName: newName });
}
関連
-
[解決済み】JavaScriptエラー(Uncaught SyntaxError: Unexpected end of input)
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] let "と "var "の使い分けは?
-
[解決済み] JavaScriptでオブジェクトをディープクローンする最も効率的な方法は何ですか?
-
[解決済み] とは何ですか! (not not)演算子とは何ですか?
-
[解決済み] callとapplyの違いは何ですか?
-
[解決済み] Bowerとnpmの違いは何ですか?
-
[解決済み] React NativeとReactの違いは何ですか?
-
[解決済み] Reactで親の状態を更新するにはどうしたらいいですか?
-
[解決済み】JavaScript版sleep()とは?)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
親子コンポーネント通信を解決する3つのVueスロット
-
要素ツリー制御によるvueTreeテーブル
-
vue3.0プロジェクトのアーキテクチャを構築するための便利なツール
-
Vueのクラススタイルの使い方の詳細
-
vueのプロジェクトでモックを使用する方法を知っていますか?
-
[解決済み] 配列の結合時に未定義のプロパティ 'push' を読み込むことができない
-
[解決済み】「X-Frame-Options」を「SAMEORIGIN」に設定したため、フレームでの表示を拒否された。
-
[解決済み】TypeErrorの解決方法。未定義またはヌルをオブジェクトに変換できない
-
[解決済み] TypeError: $.ajax(...) is not a function?
-
[解決済み】リクエストに失敗していないのに、「TypeError: failed to fetch」が表示される。