前の単語場合によっては、通常のデータ フローの外部で子に対する変更を強制する必要があります。変更する子は、React コンポーネント インスタンスまたは DOM 要素にすることができます。現時点では、DOMを操作するためにrefが使用されています 使用シナリオref が適している状況をいくつか示します。 1. フォーカス、テキスト選択、メディアコントロールを処理する 2. 強制アニメーションをトリガーする 3. サードパーティのDOMライブラリを統合する 宣言的に実行できる場合は、ref の使用を避けてください。 [注意] open() メソッドと close() メソッドを Dialog コンポーネントに直接公開しないでください。isOpen プロパティを渡す方が適切です。 参照React は、任意のコンポーネントに特別な属性を追加することをサポートしています。 ref 属性は、コンポーネントがマウントまたはアンマウントされたときにすぐに実行されるコールバック関数を受け入れます。 [注意] コンポーネントがマウントされた後にrefを取得します。これはcomponentWillMountや最初のレンダリングでは取得できませんが、componentDidMountでは取得できます。 HTML要素HTML 要素に ref 属性を追加すると、ref コールバックは基になる DOM 要素をパラメーターとして受け取ります。 React コンポーネントは、ロード時に DOM 要素を ref コールバック関数に渡し、アンロード時に null を渡します。 ref コールバックは、componentDidMount または componentDidUpdate ライフサイクル コールバックの前に実行されます。 クラスCustomTextInputはReact.Componentを拡張します。 コンストラクタ(props) { スーパー(小道具); this.focus = this.focus.bind(this); } 集中() { テキスト入力にフォーカスを当てます。 } 与える() { 戻る ( <div> <入力 タイプ="テキスト" ref={(入力) => { this.textInput = input; }} /> <入力 タイプ = "ボタン" value="テキスト入力にフォーカスする" onClick={this.focus} /> </div> ); } } 短く書くと次のようになります ref={input => this.textInput = 入力} クラスコンポーネントクラスを使用して宣言されたカスタム コンポーネントに ref 属性を使用すると、ref コールバックは読み込まれた React インスタンスを受け取ります。 クラスAutoFocusTextInputはReact.Componentを拡張します{ コンポーネントマウント() { テキスト入力にフォーカスを当てる } 与える() { 戻る ( <カスタムテキスト入力 ref={(入力) => { this.textInput = input; }} /> ); } } [注意] このメソッドはクラスで宣言されたCustomTextInputに対してのみ有効です 機能コンポーネント関数コンポーネントにはインスタンスがないため、ref 属性は使用できません。 [DOMノードを親コンポーネントに公開する]子ノードに特別な属性を公開します。子ノードは function 属性を取得し、それが DOM ノードに ref 属性として添付されます。これにより、親はミドルウェアを介して子のDOMノードに参照を渡すことができる。 この方法は、クラス コンポーネントと機能コンポーネントの両方に適用できます。 関数 CustomTextInput(props) { 戻る ( <div> <入力ref={props.inputRef} /> </div> ); } クラス Parent は React.Component を拡張します { 与える() { 戻る ( <カスタムテキスト入力 inputRef={el => this.inputElement = el} /> ); } } 上記の例では、Parent は ref コールバックを特別な inputRef として CustomTextInput に渡し、CustomTextInput はそれを ref 属性を介して <input> に渡します。最後に、Parentのthis.inputElementは、CustomTextInputの<input>要素に対応するDOMノードに設定されます。 制御されていないコンポーネント制御されていないコンポーネントを書くには、状態の更新ごとにイベントハンドラを書く代わりに、refを使用してDOMからフォームの値を取得できます。 [注意] reactをバインドせずにe.target.valueを介してDOM値を取得できます クラスNameFormはReact.Componentを拡張します{ コンストラクタ(props) { スーパー(小道具); this.handleSubmit = this.handleSubmit.bind(this); } ハンドル送信(イベント) { alert('名前が送信されました: ' + this.input.value); イベントをデフォルトにしない(); } 与える() { 戻る ( <フォームonSubmit={this.handleSubmit}> <ラベル> 名前: <input type="text" ref={(input) => this.input = input} /> </ラベル> <input type="submit" value="送信" /> </フォーム> ); } } 非制御コンポーネントは実際のデータを DOM に保存するため、非制御コンポーネントを使用すると、React コードと非 React コードを同時に統合しやすくなります。 【デフォルト値】React ライフサイクル中、フォーム要素の value 属性は DOM 内の値をオーバーライドします。制御されていないコンポーネントを使用する場合、通常は React で初期値を割り当てますが、それ以降の更新は制御しないようにします。この問題を解決するには、値の代わりに defaultValue 属性を指定します。 与える() { 戻る ( <フォームonSubmit={this.handleSubmit}> <ラベル> 名前: <入力 デフォルト値="ボブ" タイプ="テキスト" ref={(入力) => this.input = 入力} /> </ラベル> <input type="submit" value="送信" /> </フォーム> ); } 同様に、<input type="checkbox">と<input type="radio">はdefaultCheckedをサポートし、<select>と<textarea>はdefaultValueをサポートします。 リアクトDOMreact-dom パッケージは、アプリケーションのトップレベルのスコープから呼び出すことができる DOM のメソッドを提供し、必要に応じて React モデル外部の終了ポイントとして使用することもできます。しかし、ほとんどのコンポーネントはこのパッケージを使用する必要はありません 与える() コンポーネントをアンマウントする() DOMNode を見つける() 【与える()】ReactDOM.render() は、 要素、 容器、 [折り返し電話] ) 指定されたコンテナー内の DOM 要素に追加された React 要素をレンダリングし、コンポーネントへの参照 (ステートレス コンポーネントの場合は null) を返します。 React 要素が以前にコンテナーにレンダリングされている場合、このコードは更新を実行し、要素の最新の状態を反映するために必要な DOM 要素のみを変更します。 【コンポーネントノードのアンマウント()】 ReactDOM.unmountComponentAtNode(コンテナ) [DOMNode() を検索] ReactDOM.findDOMNode(コンポーネント) 新しい参照バージョン 16.3 より前の React では、ref を提供する方法が文字列とコールバックの 2 つありました。文字列メソッドにはいくつか問題があるため、公式の推奨では ref を使用するにはコールバックを使用します。今回導入されたcreateRef APIは、refを使用するための欠陥のない方法であると公式に言われており、コールバックメソッドも道を譲ることができる。 クラスMyComponentはReact.Componentを拡張します。 コンストラクタ(props) { スーパー(小道具); this.myRef = React.createRef(); } 与える() { <div ref={this.myRef} /> を返します。 } } 次に、現在の属性を使用して現在の要素を取得します。 this.myRef.current 典型的なアプリケーションを以下に示します。 コンストラクタ(props){ スーパー(小道具) this.Mask = React.createRef() this.MenuList = React.createRef() } ハンドルクリック = () => { ReactDOM.findDOMNode(this.MenuList.current).classList.toggle('transform-zero') ReactDOM.findDOMNode(this.Mask.current).classList.toggle('mask-show') } [注] styledComponentsでスタイル設定された要素によって公開されるインターフェースは、refではなくinnerRefです。 <ラップ innerRef={this.itemRef}> これで、React での DOM 操作の実装に関するこの記事は終了です。React の DOM 操作に関するより詳しい情報は、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: Linuxで新しいユーザーを作成し、指定されたディレクトリへの権限を付与する
まずは例を見てみましょうコードをコピーコードは次のとおりです。 <!DOCTYPE html ...
目次1. インターフェース効果のプレビュー2.uViewのインストール3.uViewの設定3.1 m...
LOFTER のコンテストで、ログイン ボックスを再設計できると言及されているのを見ました。過去 2...
目次インストールの前提条件ステップ1: システムの残りを確認してクリアし、Dockerの依存関係をイ...
序文: Linux ホストは、エージェント プログラムをインストールする場合でも、SNMP を使用す...
最近、私は「ぶどうコレクション」というプロジェクトに取り組んでいます。簡単に言うと、Budou ペー...
MySQLデータベースをダウンロードするには、https://dev.mysql.com/down...
XHTML の img タグはいわゆる自己終了タグであり、XML では完全に合法です。 XHTMLの...
序文バックアップは災害復旧の基礎であり、システム操作エラーやシステム障害によるデータ損失を防ぐために...
ユーザー組織には、ドメインに参加している 2 台の Windows Server 2008 R2 フ...
JavaScriptは画像を表示したり非表示にしたりしますが、参考までに具体的な内容は次のとおりで...
コードは次のようになります。 <!DOCTYPE html> <html> ...
MySQL の導入現在、会社ではプラットフォーム運用を通じてMySQLを導入しています。金曜日、プラ...
1. pc-reset PCスタイルの初期化 /* 正規化.css */ html{ 行の高さ: 1...
<br />製品設計プロセス全体において、ビジュアルデザインとインタラクションデザインの...