、
1. 値を独自の状態に保持する コンポーネントは外部から変更できません。 。
... //render方法上面的内容省略 <FormItem label="问题描述:" hasFeedback {...props.formItemLayout} > <Input type="textarea" defaultValue={props.value}/> </FormItem> //render下面的内容省略 ...
コード セグメントが属するコンポーネントに value props を渡した後、テキスト ボックスのデフォルト値は常に空になります。ページの状態、値は です。 対応する状態の初期値は空です。そのため、後続の非同期リクエストが成功した後に value に対応する状態の値が変更され、引き続き空として表示されます。
制御コンポーネント
たとえば、制御コンポーネントは値属性を追加するフォーム コンポーネントであり、非制御コンポーネントは値属性が追加されていないコンポーネントです。制御コンポーネントのフォームは次のとおりです。 value 属性が追加されました。要素は、コンポーネントの値が特定の値に設定されると、常にその値になるため、コンポーネントの値の変更を制御する必要があります。
この書き方では問題が発生します。レンダリングされた入力コンポーネントのユーザー操作中は、ユーザーが入力した値は機能せず、入力ボックスの値は常に Hello! になります。これは、HTML での入力の動作と矛盾します。 このため、コンポーネントを制御するには、入力コンポーネントの値を制御できる必要があります。つまり、コンポーネントと連携するためにコンポーネント内で状態を維持する必要があります。入力コンポーネントの onChange メソッドと setState メソッドを使用して、コンポーネントの制御を完了します。たとえば、上記のフォームは、内部で状態を維持する inputItem コンポーネントでカプセル化できます。このようにして、InputItem コンポーネントは次のように外部から呼び出すことができます:
render: function() { return <input type="text" value="Hello!" />; }
この方法で、react の Input コンポーネントを制御できます。実際、ステートフル コンポーネントは状態を維持できるため、それを完了するには、react のステートフル コンポーネントを使用する必要があります。内部的に。
非制御コンポーネントexport default class InputItem extends React.Component{ constructor(props){ super(props); this.state = { value: "" } } componentWillReceiveProps(nextProps){ this.setState({ value: nextProps.value }) } _onChange(evt){ this.setState({ value: evt.target.value }) } render(){ return ( <input type="text" value={this.state.value} onChange={this._onChange.bind(this)}/> ); } }
概要
React コンポーネントを使用する場合、制御されたコンポーネントと制御されていないコンポーネントが発生します。現時点では、React コンポーネントにはステートレス コンポーネントを使用することが推奨されていますが、このフォームを使用して React コンポーネントを実装する場合は、制御されていないコンポーネントを使用してください。制御された要素を制御する必要がある場合は、次のような問題が発生します。 `制御コンポーネント` は内部状態を積極的に維持する必要がありますが、`ステートレス コンポーネント` は内部状態を維持する必要がありません。コンポーネントの状態、この 2 つの間に矛盾があります。そのため、ステートレス コンポーネントを使用して制御された要素を作成することはできません。
制御された要素は通常、初期値を動的に設定する必要がある状況で使用されます。たとえば、フォームのフォーム情報を編集する場合、入力フォーム要素は、最初にサーバーから返された特定の値を表示してから、それを編集する必要があります。
非制御要素は、通常、動的な初期値情報がない場合に使用されます。たとえば、フォーム情報を作成する場合、入力フォーム要素には初期値がなく、ユーザー入力が必要です関連する推奨事項:
Reactの制御コンポーネントと非制御コンポーネントの説明
以上が反応制御コンポーネントと非制御コンポーネントの詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。