コンポーネント通信の概要コンテンツ
3つの方法
まとめコンポーネント内の状態はプライベートです。つまり、コンポーネントの状態はコンポーネント内でのみ使用でき、コンポーネントの外部で直接使用することはできません。 コンポーネントコミュニケーション - 父から息子へコンテンツ:
コアコード親コンポーネントはデータを提供し、それを子コンポーネントに渡します。 クラス Parent は React.Component を拡張します { 状態 = { lastName: '王' } 与える() { 戻る ( <div> 子コンポーネントにデータを渡します: <Child name={this.state.lastName} /> </div> ) } } サブコンポーネントがデータを受信関数Child(props) { return <div>子コンポーネントはデータを受け取ります: {props.name}</div> } コンポーネント通信 - 子から親へアイデアコールバック関数を使用すると、親コンポーネントがコールバックを提供し、子コンポーネントがそれを呼び出し、渡されるデータがコールバック関数のパラメーターとして使用されます。 ステップ1. 親コンポーネント 1. コールバック関数 f を定義します(データを受信するために使用されます) 2. 関数fを属性の値として子コンポーネントに渡す 2. サブコンポーネント 1. 小道具を使ってfを取得する 2. fを呼び出して子コンポーネントのデータを渡す コアコード親コンポーネントは関数を提供し、それを子コンポーネントに渡します クラス Parent は React.Component を拡張します { 州: { 数: 100 } f = (数値) => { console.log('サブコンポーネントデータを受信しました', num) } 与える() { 戻る ( <div> 子コンポーネント: <Child f={this.f} /> </div> ) } } 子コンポーネントは関数を受け取り、 クラスChildはReact.Componentを拡張します。 ハンドルクリック = () => { // 親コンポーネントから渡されたプロパティを呼び出し、パラメータ this.props.f(100) を渡します。 } 戻る ( <button onClick={this.handleClick}>クリックすると親コンポーネントにデータが渡されます</button> ) } まとめ子から親へ: 親コンポーネントで定義されたメソッドを子コンポーネントで呼び出し、必要に応じてパラメータを渡します。 コンポーネント通信 - ブラザーコンポーネントReact には兄弟コンポーネントというものはなく、状態の昇格のみがあります。 アイデア
コアコード
React をインポートします。{ コンポーネント } を 'react' からインポートします。 'react-dom' から ReactDOM をインポートします。 './Jack' から Jack をインポートします './Rose' から Rose をインポートします クラスAppはComponentを拡張します{ // 1. 状態が親コンポーネントに昇格される state = { メッセージ: ''、 } 与える() { 戻る ( <div> <h1>私はアプリコンポーネントです</h1> <ジャックは言う={this.changeMsg}></ジャック> 2. 子コンポーネントにステータスを表示する*/ <ローズ メッセージ = {this.state.msg}></ローズ> </div> ) } changeMsg = (メッセージ) => { this.setState({ メッセージ、 }) } } // レンダリングコンポーネント ReactDOM.render(<App />, document.getElementById('root')) React をインポートします。{ コンポーネント } を 'react' からインポートします。 デフォルトのクラスJackをエクスポートし、Componentを拡張します。 与える() { 戻る ( <div> <h3>私はジャックコンポーネントです</h3> <button onClick={this.say}>発言</button> </div> ) } 言う = () => { this.props.say('あなたがジャンプすると私が見る') } } React をインポートします。{ コンポーネント } を 'react' からインポートします。 デフォルトクラスRoseをエクスポートし、Componentを拡張します。 与える() { 戻る ( <div> <h3>私はローズコンポーネントです - {this.props.msg}</h3> </div> ) } } コンポーネント通信 - レベル間コンポーネント通信Vueでクロスレベルコンポーネント通信を使用する場合は、Contextを使用する必要があります。 コンテキストを使用する手順3 つのステップがあります。 1. createContextメソッドをインポートして呼び出し、結果からプロバイダとコンシューマのコンポーネントを分解します。 'react' から {createContext} をインポートします。 const { プロバイダー、コンシューマー } = createContext() 2. プロバイダコンポーネントを使用してルートコンポーネントをラップし、値属性を通じて共有するデータを提供します。 戻る ( <プロバイダー値={ここに渡すデータを入力してください}> <ルートコンポーネントの内容/> </プロバイダー> ) 3. 子孫コンポーネントでは、ステップ2でエクスポートしたコンシューマーコンポーネントでコンポーネント全体をラップします。 戻る ( <消費者> { (データ) => { // ここでのパラメータデータはプロバイダーから渡されたデータを自動的に受け取ります // console.log(data) <コンポーネントコンテンツ> を返します。 } } </消費者> ) 着陸コード
'react' から {createContext} をインポートします。 const { プロバイダー、コンシューマー } = createContext() エクスポート { コンシューマー、プロバイダー } ルートコンポーネントの変換 './context' から { Provider } をインポートします。 与える () { 戻る ( <プロバイダー値={{ num: this.state.num }}> <div> ルート コンポーネント、番号: {this.state.num} <親 /> <おじさん /> </div> </プロバイダー> ) } 子孫コンポーネント 'react' から React をインポートします './context' から Consumer をインポートします。 デフォルトのクラスUncleをエクスポートし、React.Componentを拡張します。 与える () { 戻る ( <消費者> {(データ) => { <div>I am Uncle コンポーネント、{data.num} を返します。 }} </消費者> ) } } 要約するこの記事はこれで終わりです。皆さんのお役に立てれば幸いです。また、123WORDPRESS.COM のその他のコンテンツにも注目していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: ウェブデザインには目的、アイデア、思考、そして粘り強さがなければならない
>>: フロントエンド開発者に何百万ドルもの価値をもたらす 10 のスキル
MySQL による CPU 負荷の上昇今日の午後、MySQL によってサーバーの負荷が高くなる問題を...
目次ストアドプロシージャの概要ストアド プロシージャを使用する理由は何ですか?ストアドプロシージャの...
この記事では、参考までに、簡単なスネークゲームを実装するためのjsキャンバスの具体的なコードを共有し...
Linux C/C++ では、スレッド レベルの操作は通常、pthread ライブラリを通じて実行さ...
目次問題の説明方法 1 (バックエンドが画像 URL を返す)方法 2 (フロントエンドで requ...
ラジオ ボタンや複数選択ボタンにスタイルを追加する方法や、ボタンを大きくする方法を尋ねる人を以前見か...
パスワードを忘れると困ります。Mac に MySQL をインストールするための初期パスワードを忘れて...
序文これは私が最近見つけた新しい機能です。プロジェクトでの私の使用シナリオは次のとおりです。アプリケ...
この記事では、参考までに、シンプルなディスククロックを実装するためのjsの具体的なコードを紹介します...
Redis は分散キャッシュ サービスです。キャッシュは、大規模システムの開発やパフォーマンスの最適...
MySQL 5.7.x の最新バージョンをダウンロードしてインストールしました。デフォルトでは、on...
目次1. リストインターフェースとその他のモジュールの表示処理2. 従来のインターフェースコンポーネ...
MySQL の多くのテーブルには、NULL が列のデフォルト属性であるため、アプリケーションが NU...
docker-compose.yml に extra_hosts キーワードを追加すると、コンテナの...
1. MySQLをシャットダウンする [root@localhost /]# サービスmysqldを...