React で `state.item[1]` を `setState` で更新するにはどうすればよいですか?

Linda Hamilton
リリース: 2024-11-02 16:07:02
オリジナル
555 人が閲覧しました

How to Update `state.item[1]` with `setState` in React?

State.item を更新する方法[1] setState を使用する

React アプリケーションでは、配列またはオブジェクトの状態を更新するのは難しい場合があります。この記事では、React の一般的なタスクである setState を使用して状態の state.item[1] を更新する方法について説明します。

問題

提供された React コンポーネント内で、目標はユーザーが独自のフィールドを設計できる動的なフォーム。状態は最初は次のようになります:

this.state.items[1] = {
  name: 'field 1',
  populate_at: 'web_start',
  same_as: 'customer_name',
  autocomplete_from: 'customer_name',
  title: ''
};
ログイン後にコピー

ユーザーがいずれかの値を変更したときに状態を更新しようとすると、問題が発生します。正しいオブジェクトをターゲットにすることが困難になります。

解決策

状態を正しく更新するには、次の手順に従います:

  1. アイテムの浅いコピーを作成します。
  2. 変更したい項目の浅いコピーを作成します。
  3. 関心のあるプロパティを置き換えます。
  4. それを配列に戻します。ここでは配列を変更していることに注意してください。そのため、最初にコピーを作成することが重要です。
  5. 状態を新しいコピーに設定します。

実装例:

handleChange: function (e) {
  // 1. Make a shallow copy of the items
  let items = [...this.state.items];
  // 2. Make a shallow copy of the item you want to mutate
  let item = {...items[1]};
  // 3. Replace the property you're intested in
  item.name = 'newName';
  // 4. Put it back into our array. N.B. we *are* mutating the array here, 
  //    but that's why we made a copy first
  items[1] = item;
  // 5. Set the state to our new copy
  this.setState({items});
}
ログイン後にコピー

代替実装:

  • ステップ 2 と 3 の組み合わせ:
let item = {...items[1], name: 'newName'}
ログイン後にコピー
  • 単一行実装:
this.setState(({items}) => ({
  items: [
    ...items.slice(0, 1),
    {...items[1], name: 'newName'},
    ...items.slice(2)
  ]
}));
ログイン後にコピー

以上がReact で `state.item[1]` を `setState` で更新するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!