親コンポーネントは子コンポーネントと通信します
親グループ内のref参照を定義する 'react' から React,{Component,createRef} をインポートします。 './Child1' から Child1 をインポートします デフォルトクラスAppをエクスポートし、Componentを拡張します。 コンストラクタ(props){ スーパー(小道具) this.child = createRef() } 与える(){ 戻る( <div> <Child1 ref={this.child}/> <ボタンのonClick={this.fn.bind(this)}></ボタン> </div> ) } 関数(){ const 子 = this.child.current 子.setTitle() } } サブコンポーネントはデータソースとデータソースの変更方法を定義します React をインポートします。{Component} を 'react' からインポートします。 エクスポートデフォルトクラスChild1はComponentを拡張します{ 状態={ title:'タイトル' } 与える(){ 戻る ( <div> {この州のタイトル} </div> ) } タイトルを設定する(){ this.setstate({title:'hh'}) } } 子コンポーネントは親コンポーネントと通信します親コンポーネントは、独自のメソッドの 1 つを子コンポーネントに渡します。メソッドでは、状態の変更など、何でも実行できます。子コンポーネントは、 コンポーネント間の通信React には、この問題を解決するための Vue のようなイベント バスがありません。 1 つの方法は、共通の親コンポーネントを使用してプロキシ経由で実装することですが、プロセスは非常に面倒になります。 React は、コンポーネント ツリーの各レイヤーにプロパティを明示的に渡すことなく、コンポーネント間の通信を実現するための Context を提供します。
先祖と子孫
React をインポートし、 'react' から {createContext} を作成します。 {プロバイダー、コンシューマー} = createContext() を作成します。 輸出 { プロバイダー、//パブリッシュ コンシューマー //サブスクライブ} 2. 祖先ノード 'react' から React 、{Component} をインポートします。 './store' から {Provider,Consumer} をインポートします。 './Son' から Son をインポートします デフォルトクラスAppをエクスポートし、Componentを拡張します。 コンストラクタ(props){ スーパー(小道具) this.state={ 名前:'mingcen' } } 与える(){ 戻る ( <div> <プロバイダー値={this.state.name}> <息子/> </プロバイダー> </div> ) } } 3. 子孫ノード React をインポートします。{Component} から 'react' './store' から {Consumer} をインポートします。 エクスポートデフォルトクラスSon1はComponentを拡張します{ コンストラクタ(props){ スーパー(小道具) this.state={ 名前:'ううう' } } 与える(){ 戻る( <div> <消費者> { 値=>{ <div>{値.名前}</div> } } </消費者> </div> ) } } ブラザーノード通信
祖先 状態={ カウント:1, setCount:()=>{ this.setState(state=>{ 戻る { カウント:++状態.カウント } }) } } 与える(){ {count,setCount} = this.state とします。 戻る( <div> <プロバイダー値={{count,setCount}}> <Cmp1></Cmp1> <Cmp2></Cmp2> </プロバイダー> </div> ) } ブラザーCmp2 React をインポートし、{ Component 、 createContext } を 'react' から取得します。 エクスポートデフォルトクラスCmp2はComponentを拡張します{ // デフォルトデータのみ取得 --> プロバイダーコンポーネントにラップされていません static contextType = createContext 与える() { 戻る ( <div> <button onClick={this.setCount.bind(this)}>データの自動増加</button> </div> ) } setCount() { this.context.setCount() } } ブラザーCmp1 <消費者> { 値 => <h3>{value.count}</h3> } </消費者> 要約するこの記事はこれで終わりです。皆さんのお役に立てれば幸いです。また、123WORDPRESS.COM のその他のコンテンツにも注目していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: マークアップ言語 - テキストの CSS スタイルを指定する
>>: Xmeter APIインターフェーステストツールの使用状況の分析
目次1. MySQLインデックスの紹介2. MySQLの5種類のインデックスの詳しい説明1. 総合索...
より使いやすい Web アプリケーションを設計するための 10 のヒントをご紹介します。ヒント1: ...
翻訳プログラムを例に挙げてみます。前回はWindowsでのアプリケーションのパッケージ化についてお話...
目次1. プロパティを型リストに制限する2. デフォルトのコンテンツと拡張ポイント3. ネストされた...
なぜログを読む必要があるのでしょうか?たとえば、コンテナの起動に失敗したがプロンプトが表示されない場...
CAST関数前回の記事では、型変換を表示するために使用する CAST 関数について説明しました。暗黙...
黄金律常に同じコーディング標準セットに従ってください。同じプロジェクトに何人の人が関わっているかに関...
序文実際のビジネスでは、ページングは一般的なビジネス要件です。次に、制限クエリを使用します。制限...
CSS操作 CS $("").css(名前|プロ|[,値|関数]) 位置$(&q...
質問:最近、プロジェクトを展開すると文字化けしたデータが出てきました。確認したところ、プロジェクトは...
この記事では、CSS無限シームレススクロール効果を実現するためのvue3の具体的なコードを参考までに...
MySQL データベースでは、null は一般的な状況です。MySQL での null に関する注意...
目次長すぎて読めないコンポーネントスタイルの分離デモテスト優先度ページの分離構成参考文献ネイティブ ...
1. オーバーフローOverflow はオーバーフロー(コンテナ)です。コンテンツがコンテナを越える...
MySQL には次のログがあります。エラーログ: -log-errクエリログ: -logスロークエリ...