React.jsにおいて、stateを定義するためにsetState関数を使用しますが、this.state.hoge = でも値を代入できます。
これらの本質的違いはなんでしょうか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
ベストアンサー
setState()
でstateを書き換えた場合は、コンポーネントに対してアップデートが自動的に実行され、変更があれば再レンダリングが行われます。対して、this.state.プロパティ名 =
でstateを書き換えても、手動または他の手段でアップデートが実行されない限り、再レンダリングはされず、表示が変わりません。
違いを見るためのちょっとしたサンプルを作りました。
JavaScript
1class Main extends React.Component { 2 constructor(props) { 3 super(props); 4 this.state = { 5 a: 0, 6 b: 0, 7 }; 8 } 9 aUp() { 10 this.setState({ 11 a: this.state.a + 1 12 }); 13 } 14 bUp() { 15 this.state.b = this.state.b + 1; 16 } 17 render() { 18 return ( 19 <div> 20 <div> 21 <input type="button" onClick={this.aUp.bind(this)} value="a up" /> 22 <span> a = {this.state.a}</span> 23 </div> 24 <div> 25 <input type="button" onClick={this.bUp.bind(this)} value="b up" /> 26 <span> b = {this.state.b}</span> 27 </div> 28 </div> 29 ); 30 } 31} 32 33ReactDOM.render( 34 <Main />, 35 document.getElementById('main') 36); 37
a upとb upを押したときの動作の違いについて確認してみてください。
なお、constructor()
に関しては、コンポーネント作成時の呼び出しでconstructor()
実行後にレンダリング処理が行われるため、setState()
は使わずにthis.state
を直接作成することになります。
投稿2017/06/18 02:14
編集2017/06/18 02:15総合スコア21735
0
直で代入した場合だと、renderメソッドが自動的に呼ばれないのではなかったですか?
投稿2017/06/18 01:58
退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/06/18 03:59