React:兄弟を更新せずにリストにアイテムを追加することは可能ですか?

lxe

私が持っているとしましょう:

class Item extends React.Component {
  render() {
    console.log('Let's assume this does something slow...');
    return <li>{this.props.text}</li>;
  }
}


class List extends React.Component {
  constructor() {
    super();
    this.state = {
      items: [],
    };
  }
  addItem = text => {
    this.setState({
      // Mutates the array reference... is there a way around it?
      items: this.state.items.concat({ id: Math.random(), text }),
    });
  };
  render() {
    return (
      <div>
        <button onClick={() => this.addItem(Math.random())}>Add Item</button>
        <ul>
          // This will run on every render, re-rendering the whole list...
          {this.state.items.map(item => (
            <Item key={item.id} text={item.text} />
          ))}
        </ul>
      </div>
    );
  }
}

既存のリストをそのままにして、render()兄弟を呼び出さずに新しいアイテムを上下に追加するだけでよいのでしょうか。

Tholle

ReactComponentは常に再レンダリングされますが、プロップと状態の比較が浅いPureComponent実装であるshouldComponentUpdateため、プロップが変更されない限り再レンダリングされません。

class Item extends React.PureComponent {
  render() {
    console.log("Let's assume this does something slow...");
    return <li>{this.props.text}</li>;
  }
}

class List extends React.Component {
  state = {
    items: []
  };

  addItem = text => {
    this.setState(prevState => {
      return { items: [...prevState.items, { id: Math.random(), text }] };
    });
  };

  render() {
    return (
      <div>
        <button onClick={() => this.addItem(Math.random())}>Add Item</button>
        <ul>
          {this.state.items.map(item => (
            <Item key={item.id} text={item.text} />
          ))}
        </ul>
      </div>
    );
  }
}

ReactDOM.render(<List />, document.getElementById("root"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>

<div id="root"></div>

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

INDEXを参照せずにリストからアイテムを削除することは可能ですか?

分類Dev

リストアイテムを入力せずにリストアイテムへのアクションを定義することは可能ですか?-Android

分類Dev

バックテストライブラリを使用せずに取引アルゴリズムをバックテストすることは可能ですか?

分類Dev

Androidリストビューにさまざまなアイテムを追加することは可能ですか

分類Dev

UbuntuシステムにアプリケーションをインストールせずにSnaps、FlatPaks、AppImagesを見つけることは可能ですか?

分類Dev

Kubernetesクラスターを追加せずにGitlabでテストを実行することは可能ですか?

分類Dev

rootアカウントを使用せずにWindowsファイルシステムをマウントすることは可能ですか?

分類Dev

Androidカレンダーでイベントを作成せずにプログラムでリマインダーを追加することは可能ですか?

分類Dev

ViewGroupsアイテムをViewGroups兄弟の前に持ってくることは可能ですか?

分類Dev

遅延せずにタイムアウトを使用することは可能ですか?

分類Dev

PlayをインストールせずにJSONライブラリを使用することは可能ですか?

分類Dev

兄弟のdivを表示するために、mouseenterイベントをimgに追加することは可能ですか?

分類Dev

フリートなどを更新せずにCoreOSでDockerを更新することは可能ですか?

分類Dev

アプリを削除せずにAndroidデバイスからキャッシュされたファイルを更新することは可能ですか?

分類Dev

リサイクラービュー外のアイテムをリストと一緒にスクロールさせることは可能ですか?

分類Dev

スライスを使用せずに配列内のアイテムの数を制限することは可能ですか?

分類Dev

WPFは、バインディングを使用せずにリストボックスを更新することは可能ですか?

分類Dev

CentOSのNautilus右クリックメニューにアイテムを追加することは可能ですか?

分類Dev

reactアプリを使用せずにreact-speech-recognitionを使用することは可能ですか?

分類Dev

cassandraサービスを停止せずにcassandraへのクライアントリクエスト(cqlsh)を無効にすることは可能ですか?

分類Dev

リストの位置をハードコーディングせずに、jsonディクショナリのリスト内のアイテムを識別することは可能ですか?

分類Dev

UPSを近くに置かずにUPSバッテリーをテストすることは可能ですか?

分類Dev

次の行に移動せずにリストにアイテムを追加するにはどうすればよいですか?

分類Dev

アイテムとトリガーを動的に作成することは可能ですか?

分類Dev

ファイルシステムに直接触れずに、メモリからシステムドライバをロードすることは可能ですか?

分類Dev

同じソリューションを使用せずに、NetCoreアプリからNetCoreライブラリへの参照を追加することは可能ですか?

分類Dev

最初にリストを作成せずにシリーズをDataFrameの行に追加することは可能ですか?

分類Dev

ObjectListViewサブアイテムに埋め込みリソース画像を使用することは可能ですか?

分類Dev

ピラミッドアプリケーションを卵としてインストールせずに実行することは可能ですか?

Related 関連記事

  1. 1

    INDEXを参照せずにリストからアイテムを削除することは可能ですか?

  2. 2

    リストアイテムを入力せずにリストアイテムへのアクションを定義することは可能ですか?-Android

  3. 3

    バックテストライブラリを使用せずに取引アルゴリズムをバックテストすることは可能ですか?

  4. 4

    Androidリストビューにさまざまなアイテムを追加することは可能ですか

  5. 5

    UbuntuシステムにアプリケーションをインストールせずにSnaps、FlatPaks、AppImagesを見つけることは可能ですか?

  6. 6

    Kubernetesクラスターを追加せずにGitlabでテストを実行することは可能ですか?

  7. 7

    rootアカウントを使用せずにWindowsファイルシステムをマウントすることは可能ですか?

  8. 8

    Androidカレンダーでイベントを作成せずにプログラムでリマインダーを追加することは可能ですか?

  9. 9

    ViewGroupsアイテムをViewGroups兄弟の前に持ってくることは可能ですか?

  10. 10

    遅延せずにタイムアウトを使用することは可能ですか?

  11. 11

    PlayをインストールせずにJSONライブラリを使用することは可能ですか?

  12. 12

    兄弟のdivを表示するために、mouseenterイベントをimgに追加することは可能ですか?

  13. 13

    フリートなどを更新せずにCoreOSでDockerを更新することは可能ですか?

  14. 14

    アプリを削除せずにAndroidデバイスからキャッシュされたファイルを更新することは可能ですか?

  15. 15

    リサイクラービュー外のアイテムをリストと一緒にスクロールさせることは可能ですか?

  16. 16

    スライスを使用せずに配列内のアイテムの数を制限することは可能ですか?

  17. 17

    WPFは、バインディングを使用せずにリストボックスを更新することは可能ですか?

  18. 18

    CentOSのNautilus右クリックメニューにアイテムを追加することは可能ですか?

  19. 19

    reactアプリを使用せずにreact-speech-recognitionを使用することは可能ですか?

  20. 20

    cassandraサービスを停止せずにcassandraへのクライアントリクエスト(cqlsh)を無効にすることは可能ですか?

  21. 21

    リストの位置をハードコーディングせずに、jsonディクショナリのリスト内のアイテムを識別することは可能ですか?

  22. 22

    UPSを近くに置かずにUPSバッテリーをテストすることは可能ですか?

  23. 23

    次の行に移動せずにリストにアイテムを追加するにはどうすればよいですか?

  24. 24

    アイテムとトリガーを動的に作成することは可能ですか?

  25. 25

    ファイルシステムに直接触れずに、メモリからシステムドライバをロードすることは可能ですか?

  26. 26

    同じソリューションを使用せずに、NetCoreアプリからNetCoreライブラリへの参照を追加することは可能ですか?

  27. 27

    最初にリストを作成せずにシリーズをDataFrameの行に追加することは可能ですか?

  28. 28

    ObjectListViewサブアイテムに埋め込みリソース画像を使用することは可能ですか?

  29. 29

    ピラミッドアプリケーションを卵としてインストールせずに実行することは可能ですか?

ホットタグ

アーカイブ