ホームページ  >  記事  >  ウェブフロントエンド  >  React の制御されたコンポーネント インスタンスと制御されていないコンポーネント インスタンスの詳細な説明

React の制御されたコンポーネント インスタンスと制御されていないコンポーネント インスタンスの詳細な説明

小云云
小云云オリジナル
2018-01-29 13:22:451793ブラウズ

この記事では、React の制御コンポーネントと非制御コンポーネントの例について詳しく説明します。詳細な説明の前に、制御コンポーネントと非制御コンポーネントとは何かを簡単に紹介します。

制御されたコンポーネント

React では、フォームの状態が変化するたびに、コンポーネントの状態に書き込まれます。このタイプのコンポーネントは、React では 制御されたコンポーネント と呼ばれます。制御されたコンポーネントでは、コンポーネントのレンダリング状態はその値またはチェックされた状態に対応します。 React はこの方法でコンポーネントのローカル状態を排除します。 React は、制御されたコンポーネントの使用を公式に推奨しています。

制御されたコンポーネントの状態更新プロセス:

1. 可以通过在初始state中设置表单的默认值。
2. 每当表单的值发生变化时,调用onChange事件处理器。
3. 事件处理器通过合成事件对象e拿到改变后的状态,并更新state。
4. setState触发视图的重新渲染,完成表单组件值得更新。

非制御コンポーネント

簡単に言うと、フォームコンポーネントに値プロパティ(ラジオボタンとチェックボックスはチェックされたプロパティに対応します)がない場合、それを制御されていないコントロールコンポーネントと呼ぶことができます。このようにして、defaultValuedefaultChecked を使用してコンポーネントのデフォルトの状態を表すことができます。

React では、制御されていないコンポーネントはアンチパターンです。その値は、コンポーネント自体の状態や props によって制御されません。通常、レンダリングされた基になる DOM 要素にアクセスするには、ref prop を追加する必要があります。

制御されたコンポーネントと制御されていないコンポーネントの比較

フォームのデフォルト値がdefaultValueまたはdefaultCheckedを通じて設定されることを確認しました。これは一度だけレンダリングされ、それ以降のレンダリングでは機能しません。

<input
    value={this.state.value}
    onChange={(e) => this.setState({value: e.target.value})}
>

<input 
    defaultValue={this.state.value}
    onChange={e => {this.setState({value: e.target.value})}}
>

制御されたコンポーネントでは、本に入力された内容は出力および表示できますが、制御されていないコンポーネントでは、onChange イベントがバインドされていない場合、テキスト ボックスに入力した内容は表示されません。 制御されたコンポーネントと制御されていないコンポーネントの最大の違いは、制御されていないコンポーネントの状態がアプリケーションの状態によって制御されないことです。アプリケーションにはローカル コンポーネントの状態も存在し、制御されたコンポーネントの値はその状態から取得されるということがわかります。 。

  • パフォーマンスの問題

制御されたコンポーネントでは、フォームの値が変更されるたびに onChange タイムプロセッサが呼び出され、パフォーマンスがある程度消費されるため、React 制御コンポーネントでの使用は依然として推奨されません、この問題は、状態の統合を実現する redux アプリケーション アーキテクチャによって解決できます。

関連する推奨事項:

React コンポーネントのライフサイクル分析例

React コンポーネントのライフサイクル機能とは何ですか

React コンポーネントを構築する最も完全な方法

以上がReact の制御されたコンポーネント インスタンスと制御されていないコンポーネント インスタンスの詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。