子コンポーネントの状態にアクセスする方法について詳しく説明する直前に、この特定のシナリオを処理するためのより良いソリューションに関するMarkus-ipseの回答を必ず読んでください。
実際にコンポーネントの子の状態にアクセスしたい場合は、呼び出されるプロパティref
を各子に割り当てることができます。参照を実装する方法は2つReact.createRef()
あります。参照の使用とコールバックです。
使用する React.createRef()
これは現在、React 16.3以降のリファレンスの推奨される使用方法です(詳細については、ドキュメントを参照してください)。以前のバージョンを使用している場合は、コールバック参照について以下を参照してください。
親コンポーネントのコンストラクターで新しい参照を作成し、ref
属性を介してそれを子に割り当てる必要があります。
class FormEditor extends React.Component {
constructor(props) {
super(props);
this.FieldEditor1 = React.createRef();
}
render() {
return <FieldEditor ref={this.FieldEditor1} />;
}
}
この種の参照にアクセスするには、以下を使用する必要があります。
const currentFieldEditor1 = this.FieldEditor1.current;
これにより、マウントされたコンポーネントのインスタンスが返されるため、を使用currentFieldEditor1.state
して状態にアクセスできます。
ただ、簡単なメモは、あなたの代わりにコンポーネントのDOMノード上でこれらの参照を使用している場合(例えばと言うこと<div ref={this.divRef} />
)その後、this.divRef.current
コンポーネントインスタンスの代わりに、基本となるDOM要素を返します。
コールバック参照
このプロパティは、添付コンポーネントへの参照が渡されるコールバック関数を取ります。このコールバックは、コンポーネントがマウントまたはマウント解除された直後に実行されます。
例えば:
<FieldEditor
ref={(fieldEditor1) => {this.fieldEditor1 = fieldEditor1;}
{...props}
/>
これらの例では、参照は親コンポーネントに格納されています。コードでこのコンポーネントを呼び出すには、次を使用できます。
this.fieldEditor1
を使用this.fieldEditor1.state
して状態を取得します。
注意すべきことの1つは、子コンポーネントにアクセスする前に、子コンポーネントがレンダリングされていることを確認してください^ _ ^
あなたの代わりにコンポーネントのDOMノード上でこれらの参照を使用している場合、上記のように、(例えば<div ref={(divRef) => {this.myDiv = divRef;}} />
)その後、this.divRef
コンポーネントインスタンスの代わりに、基本となるDOM要素を返します。
さらに詳しい情報
Reactのrefプロパティの詳細については、Facebookのこのページをご覧ください。
「物事を起こす」ために子を使用してはならないことを述べている「Do n't Overuse Refs」セクションを必ずお読みくださいstate
。
これが^ _ ^お役に立てば幸いです
編集:React.createRef()
参照を作成するためのメソッドが追加されました。ES5コードを削除しました。