複数の子コンポーネントからReactの1つの親コンポーネントに情報を送信します

ジョーシュ

子コンポーネント内にあるのtotal合計をレンダリングする親コンポーネントが1つありsubtotalsます。

function Total({ products }) {
  const [total, setTotal] = useState(0);

  const handleChildToParent = (subtotal) => {
    setTotal(total + subtotal);
  };

  return (
    <div>
      {products.map((product) => (
        <Subtotal product={product} childToParent={handleChildToParent} />
      ))}
      <span>Total: {total}</span>
    </div>
  );
}

Subtotalコンポーネントはアイテムの価格を受け取り、ユーザーが選択したユニット数に基づいて小計を計算します。

function Subtotal({ product, childToParent }) {
  const [units, setUnits] = useState(0);

  const handleInputChange = (value) => {
    setUnits(value);
    childToParent(value * product.price);
  };

  return (
    <div>
      <input
        type="number"
        min={1}
        onChange={(e) => handleInputChange(e.target.value)}
        value={units}
      />
      <span>units * product price: {units * product.price}</span>
    </div>
  );
}

私の目標は、子の情報に基づいて、親コンポーネントに動的な合計を含めることです。例:ユーザーがそれぞれ100ドルの価格で2つのアイテムを選択し、12ドルの価格で3つを選択すると、親コンポーネントは236ドルを表示し、子コンポーネントは最初のアイテムに200ドル(100x2ドル)を表示し、36ドル(12x3ドル)を表示する必要があります。 2番目のアイテム(これは私が現在持っているものです)、そしてユーザーが最初のアイテムに気が変わって、2つではなく1つだけを取得したい場合、合計価格は$ 136に更新されるはずです。アイテムを差し引こうとすると、行き詰まります。アイテムの初期合計を設定し、useEffectを合計で使用しようとしましたが、解決策が得られません。コンポーネント間の子から親への通信を使用してこれが本当に可能かどうかは実際にはわかりません。

これが私が持っているもののサンドボックスです:https//codesandbox.io/s/reverent-elbakyan-i0hr1

jered

これは、「小計」コンポーネントから親に「状態を持ち上げる」必要がある典型的な例です

多くの場合、複数のコンポーネントが同じ変化するデータを反映する必要があります。共有状態を最も近い共通の祖先まで持ち上げることをお勧めします。

この場合、「いくつかのコンポーネントが同じ変更データを反映する必要がある」場所は、あなた<Total>が言ったように、あなたのコンポーネントです。

私の目標は、子の情報に基づいて、親コンポーネントに動的な合計を含めることです。

Reactのコアパターンの1つは、「データが流れ落ちる」ことです。言い換えると、データ/状態はアプリ内で高レベルで存在し、そこから子孫に「フローダウン」する必要があります。データを「子」コンポーネント(<Subtotal>)内に配置し、その祖先の状態も更新しようとすることは、Reactのアンチパターンであり、一度に2つ以上の場所で同じ状態を追跡することを意味するため、避ける必要があります。

次のようなものを試してください。

function Total({ products }) {
  // track "subtotals" in one place in state;
  // the total value of all subtotals can be trivially derived from this
  const [subtotals, setSubtotals] = React.useState(new Array(products.length).fill(0));

  // our onChange handler will update the index of "subtotals"
  // with the passed new value
  const onChange = (newValue, i) => {
    setSubtotals(oldSubtotals => {
      const newSubtotals = [...oldSubtotals];
      newSubtotals[i] = newValue;
      return newSubtotals;
    });
  }

  let total = 0;
  for (let i = 0; i < subtotals.length; i++) {
    total += subtotals[i] * products[i].price;
  }

  return (
    <div>
      {products.map((product, i) => (
        <Subtotal product={product} value={subtotals[i]} onChange={onChange} index={i} />
      ))}
      <span>Total: {total}</span>
    </div>
  );
}

// now <Subtotal> tracks no state, it is entirely stateless;
// it simply displays the correct information and calls its onChange as needed
function Subtotal({ product, value, onChange, index }) {
  return (
    <div>
      <input
        type="number"
        // updated min to 0, unless you really want to force
        // them to buy at least one...?
        min={0}
        onChange={(e) => onChange(e.target.value, index)}
        value={value}
      />
      <span>units * product price: {value * product.price}</span>
    </div>
  );
}

さて、合計値が何であるかについての真実の源であり<Total>、唯一<Total>です。1つのコンポーネントが他のコンポーネントの状態をミラーリングしようとしているという奇妙な状態の分割はありません。<Total>各小計が追跡している値を正確に把握し、その値を子コンポーネントと、その状態を更新する関数に渡すだけです。しかし、あなたは2つの場所で状態を追跡していません。これは、非常に悪いことです。

サンドボックスリンクを更新

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

子コンポーネントから親コンポーネントの関数に情報を渡す方法は?(リアクトネイティブ)

分類Dev

React-ネイティブの子コンポーネントは親コンポーネント内の情報をレンダリングしません

分類Dev

Angular5子コンポーネントから親コンポーネントの値を更新します

分類Dev

子コンポーネントから親コンポーネントに含まれる別の子コンポーネントに状態を渡す

分類Dev

親の参照を子コンポーネントに送信します

分類Dev

Vue.js:ある子コンポーネントから同じ親を持つ別のコンポーネントにデータを渡しますか?

分類Dev

変数の値を子コンポーネントから親コンポーネントに送信するにはどうすればよいですか?

分類Dev

React:親の子コンポーネントコンポーネントの状態を取得します

分類Dev

reactjsで1つのコンポーネント(子コンポーネント)から別のコンポーネント(親コンポーネント)に値を取得するにはどうすればよいですか?

分類Dev

Knockoutjs:子コンポーネントから親コンポーネントの関数を呼び出す

分類Dev

Angularの子コンポーネントから親コンポーネント関数を呼び出す

分類Dev

親コンポーネントの変数を子コンポーネントから変更する方法

分類Dev

複数の子コンポーネントのcomponentDidMount()から親コンポーネントの状態を同期的に更新する

分類Dev

親コンポーネントから子の状態を更新します

分類Dev

Angularの親から子コンポーネントを更新します

分類Dev

Angularの親から子コンポーネントを更新します

分類Dev

vuejsの親コンポーネントから子コンポーネントにメソッドを渡す

分類Dev

reactjsの親コンポーネントから子コンポーネントを強制的に更新する方法

分類Dev

角度8の@inputデコレータを使用して、親コンポーネントから子コンポーネントにデータを渡します

分類Dev

Angular @ ViewChildで子コンポーネントから親コンポーネントにデータを渡す2つの引数が必要です

分類Dev

子コンポーネントangular7から親コンポーネント関数に2つの引数を渡す方法は?

分類Dev

子コンポーネントから関数をトリガーし、ReactNativeの親コンポーネントで定義します

分類Dev

親コンポーネントと子コンポーネントのpropTypesを検証しますか?

分類Dev

あるフォームから別のコンポーネントに情報を送信する際の問題

分類Dev

Angularの親コンポーネントに子コンポーネントを作成します

分類Dev

反応し、constコンポーネントの子から親のconstコンポーネント変数を設定します

分類Dev

子コンポーネントの状態を親に渡しますか?

分類Dev

子として、またはReactコンポーネントのレンダリング関数内からreactコンポーネントを使用します

分類Dev

React Hook:子コンポーネントから親コンポーネントにデータを送信します

Related 関連記事

  1. 1

    子コンポーネントから親コンポーネントの関数に情報を渡す方法は?(リアクトネイティブ)

  2. 2

    React-ネイティブの子コンポーネントは親コンポーネント内の情報をレンダリングしません

  3. 3

    Angular5子コンポーネントから親コンポーネントの値を更新します

  4. 4

    子コンポーネントから親コンポーネントに含まれる別の子コンポーネントに状態を渡す

  5. 5

    親の参照を子コンポーネントに送信します

  6. 6

    Vue.js:ある子コンポーネントから同じ親を持つ別のコンポーネントにデータを渡しますか?

  7. 7

    変数の値を子コンポーネントから親コンポーネントに送信するにはどうすればよいですか?

  8. 8

    React:親の子コンポーネントコンポーネントの状態を取得します

  9. 9

    reactjsで1つのコンポーネント(子コンポーネント)から別のコンポーネント(親コンポーネント)に値を取得するにはどうすればよいですか?

  10. 10

    Knockoutjs:子コンポーネントから親コンポーネントの関数を呼び出す

  11. 11

    Angularの子コンポーネントから親コンポーネント関数を呼び出す

  12. 12

    親コンポーネントの変数を子コンポーネントから変更する方法

  13. 13

    複数の子コンポーネントのcomponentDidMount()から親コンポーネントの状態を同期的に更新する

  14. 14

    親コンポーネントから子の状態を更新します

  15. 15

    Angularの親から子コンポーネントを更新します

  16. 16

    Angularの親から子コンポーネントを更新します

  17. 17

    vuejsの親コンポーネントから子コンポーネントにメソッドを渡す

  18. 18

    reactjsの親コンポーネントから子コンポーネントを強制的に更新する方法

  19. 19

    角度8の@inputデコレータを使用して、親コンポーネントから子コンポーネントにデータを渡します

  20. 20

    Angular @ ViewChildで子コンポーネントから親コンポーネントにデータを渡す2つの引数が必要です

  21. 21

    子コンポーネントangular7から親コンポーネント関数に2つの引数を渡す方法は?

  22. 22

    子コンポーネントから関数をトリガーし、ReactNativeの親コンポーネントで定義します

  23. 23

    親コンポーネントと子コンポーネントのpropTypesを検証しますか?

  24. 24

    あるフォームから別のコンポーネントに情報を送信する際の問題

  25. 25

    Angularの親コンポーネントに子コンポーネントを作成します

  26. 26

    反応し、constコンポーネントの子から親のconstコンポーネント変数を設定します

  27. 27

    子コンポーネントの状態を親に渡しますか?

  28. 28

    子として、またはReactコンポーネントのレンダリング関数内からreactコンポーネントを使用します

  29. 29

    React Hook:子コンポーネントから親コンポーネントにデータを送信します

ホットタグ

アーカイブ