フォーム要素の状態を兄弟/親要素に渡す正しい方法は何ですか?

octref:
  • 2つの子クラスC1とC2をレンダリングするReactクラスPがあるとします。
  • C1には入力フィールドが含まれています。この入力フィールドをFooと呼びます。
  • 私の目標は、C2がFooの変更に反応できるようにすることです。

私は2つの解決策を考え出しましたが、どちらも正しくないと感じています。

最初の解決策:

  1. Pに状態を割り当てstate.inputます。
  2. onChangePで関数を作成しますstate.inputこれは、イベントを受け取り、を設定します
  3. これonChangeをとしてC1に渡し、C1 をFooのにpropsバインドthis.props.onChangeonChangeます。

これは機能します。Fooの値が変化するたびに、setStatePでa トリガーされるため、PにはC2に渡す入力があります。

しかし、それは同じ理由でまったく適切とは言えません。私は、子要素から親要素の状態を設定しています。これは、Reactの設計原則、つまり単一方向のデータフローを裏切るようです。
これは私がそうすることになっている方法ですか、それとももっとリアクトナチュラルな解決策がありますか?

2番目の解決策:

FooをPに入れるだけです。

しかし、これは、アプリを構造化するときに従うべき設計原則renderです。つまり、すべてのフォーム要素を最上位クラスのに配置しますか?

私の例のように、C1のレンダリングが大きい場合render、C1にrenderフォーム要素があるため、C1 全体をP に配置したくありません

どうすればよいですか?

キャプトレイ:

だから、私があなたを正しく理解しているなら、あなたの最初の解決策はルートコンポーネントの状態を維持していることを示唆していますか?私はReactの作成者のために話すことはできませんが、一般的に、これは適切な解決策であると思います。

状態を維持することは、Reactが作成された理由の少なくとも1つです(少なくとも私はそう思います)。相互に依存する可動部分が多い動的UIを処理するために独自の状態パターンのクライアント側を実装したことがある場合は、この状態管理の苦痛の多くを軽減するので、Reactが気に入るはずです。

状態を階層の上位に維持し、イベントによって更新することにより、データフローはほぼ単方向であり、ルートコンポーネントのイベントに応答するだけであり、双方向のバインディングを介して実際にデータを取得していません。ルートコンポーネントに「ここで何かが発生しました。値を確認してください」と伝えるか、状態を更新するために子コンポーネントの一部のデータの状態を渡します。C1で状態を変更し、C2にそれを認識させたいので、ルートコンポーネントの状態を更新して再レンダリングすることにより、ルートコンポーネントで状態が更新されて渡されたため、C2のプロップが同期されます。 。

class Example extends React.Component {
  constructor (props) {
    super(props)
    this.state = { data: 'test' }
  }
  render () {
    return (
      <div>
        <C1 onUpdate={this.onUpdate.bind(this)}/>
        <C2 data={this.state.data}/>
      </div>
    )
  }
  onUpdate (data) { this.setState({ data }) }
}

class C1 extends React.Component {
    render () {
      return (
        <div>
          <input type='text' ref='myInput'/>
          <input type='button' onClick={this.update.bind(this)} value='Update C2'/>
        </div>
      )
    }
    update () {
      this.props.onUpdate(this.refs.myInput.getDOMNode().value)
    }
})

class C2 extends React.Component {
    render () {
      return <div>{this.props.data}</div>
    }
})

ReactDOM.renderComponent(<Example/>, document.body)

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

状態からデータを取得し、フォームの要素を編集するにはどうすればよいですか?

分類Dev

React / Fluxで兄弟の状態でアクションを実行する正しい方法は何ですか?

分類Dev

React状態でhtmlタグを渡す正しい方法は何ですか?

分類Dev

テラフォーム変数を使用して複数の要素を作成する正しい方法は何ですか?

分類Dev

親の状態を更新するためにuseStateセッターを子に渡すのは正しいアプローチですか?

分類Dev

要素にPCDATAと他の要素の両方を含めることができる場合のDTDの正しいフォーマットは何ですか

分類Dev

JSX要素の状態を更新する方法は状態に存在しますか?

分類Dev

iframeの親からjavascriptを使用してフォームの要素値を設定するにはどうすればよいですか?

分類Dev

useStateとフォームで状態を正しく更新する方法は?

分類Dev

ajaxフォームのhtml要素を無効にする最良の方法は何ですか?

分類Dev

入力要素を使用して、それぞれの親フォームを取得するにはどうすればよいですか?

分類Dev

列挙型フィールドNullのArrayListの要素。これを行う正しい方法は何ですか?

分類Dev

データ配列を配列状態に追加する正しい方法は何ですか

分類Dev

Vuexの状態プロパティに基づいて計算を行う正しい方法は何ですか?

分類Dev

各要素が投稿フォームのキーとして渡されたオブジェクトを取得するにはどうすればよいですか?

分類Dev

QListですべてのQLabelsフォームUIを取得する正しい方法は何ですか?

分類Dev

親の状態を子コンポーネントに渡すにはどうすればよいですか?

分類Dev

子コンポーネントの状態を親に渡すにはどうすればよいですか?

分類Dev

親以外の要素にフォーカスするときに兄弟にCSS効果を追加する方法

分類Dev

null XML要素を表す正しい方法は何ですか?

分類Dev

フォームを元の状態に設定する方法は?

分類Dev

Reactjsで状態変数を設定する正しい方法は何ですか?これらのアプローチの違いは何ですか?

分類Dev

フォームのすべてのサブ要素を選択する方法は何ですか?

分類Dev

ポリマー要素を複製する正しい方法は何ですか?

分類Dev

キャストせずに、状態の契約状態フォームからデータを取得するにはどうすればよいですか?

分類Dev

C#フォームで送信者要素を参照するための最も適切な方法は何ですか?

分類Dev

「after」疑似要素のcontentプロパティを兄弟フォーム要素の属性に設定する方法

分類Dev

兄弟ではない、特定のスコープ内の要素のフォロワーを検索します

分類Dev

Reactで子から親に状態を渡しますが、親の状態は子の状態より遅れます

Related 関連記事

  1. 1

    状態からデータを取得し、フォームの要素を編集するにはどうすればよいですか?

  2. 2

    React / Fluxで兄弟の状態でアクションを実行する正しい方法は何ですか?

  3. 3

    React状態でhtmlタグを渡す正しい方法は何ですか?

  4. 4

    テラフォーム変数を使用して複数の要素を作成する正しい方法は何ですか?

  5. 5

    親の状態を更新するためにuseStateセッターを子に渡すのは正しいアプローチですか?

  6. 6

    要素にPCDATAと他の要素の両方を含めることができる場合のDTDの正しいフォーマットは何ですか

  7. 7

    JSX要素の状態を更新する方法は状態に存在しますか?

  8. 8

    iframeの親からjavascriptを使用してフォームの要素値を設定するにはどうすればよいですか?

  9. 9

    useStateとフォームで状態を正しく更新する方法は?

  10. 10

    ajaxフォームのhtml要素を無効にする最良の方法は何ですか?

  11. 11

    入力要素を使用して、それぞれの親フォームを取得するにはどうすればよいですか?

  12. 12

    列挙型フィールドNullのArrayListの要素。これを行う正しい方法は何ですか?

  13. 13

    データ配列を配列状態に追加する正しい方法は何ですか

  14. 14

    Vuexの状態プロパティに基づいて計算を行う正しい方法は何ですか?

  15. 15

    各要素が投稿フォームのキーとして渡されたオブジェクトを取得するにはどうすればよいですか?

  16. 16

    QListですべてのQLabelsフォームUIを取得する正しい方法は何ですか?

  17. 17

    親の状態を子コンポーネントに渡すにはどうすればよいですか?

  18. 18

    子コンポーネントの状態を親に渡すにはどうすればよいですか?

  19. 19

    親以外の要素にフォーカスするときに兄弟にCSS効果を追加する方法

  20. 20

    null XML要素を表す正しい方法は何ですか?

  21. 21

    フォームを元の状態に設定する方法は?

  22. 22

    Reactjsで状態変数を設定する正しい方法は何ですか?これらのアプローチの違いは何ですか?

  23. 23

    フォームのすべてのサブ要素を選択する方法は何ですか?

  24. 24

    ポリマー要素を複製する正しい方法は何ですか?

  25. 25

    キャストせずに、状態の契約状態フォームからデータを取得するにはどうすればよいですか?

  26. 26

    C#フォームで送信者要素を参照するための最も適切な方法は何ですか?

  27. 27

    「after」疑似要素のcontentプロパティを兄弟フォーム要素の属性に設定する方法

  28. 28

    兄弟ではない、特定のスコープ内の要素のフォロワーを検索します

  29. 29

    Reactで子から親に状態を渡しますが、親の状態は子の状態より遅れます

ホットタグ

アーカイブ