テーブルへのデータの追加と削除-React

ソーシック

Reactのテーブルごとに簡単な名前とメーリングリストを作成しています。サーバーからデータを取得したいのですが、次に人を動的に追加または削除できます。これがReactの最初のステップなので、問題があります。

import React, { Component } from 'react';
import Form from "./Form";

class App extends Component {
    constructor(props) {
        super(props);

        this.state = {
            people: [],
        };

        this.addPerson = this.addPerson.bind(this);
    }

    addPerson(name, email) {
        this.state.people.push({name: name, email: email});
    }

    componentDidMount() {
        this.getPeople();
    }

    getPeople() {
        fetch('https://jsonplaceholder.typicode.com/users')
            .then(response => response.json())
            .then(response => this.setState({people: response}))
            .catch(error => console.log(error));
    }


    render() {
        return (
            <div className='App'>
                <Form/>
                <table>
                    <thead>
                    <tr>
                        <th>LP</th>
                        <th>USER</th>
                        <th>EMAIL</th>
                    </tr>
                    </thead>
                    <tbody>
                    {this.state.people.map((person, index) => {
                        return (
                            <tr key={person.email}>
                                <th>{index + 1}</th>
                                <td>{person.name}</td>
                                <td>{person.email}</td>
                            </tr>
                        )

                    })}
                    </tbody>
                </table>
            </div>
        )
    }

}

export default App;

およびフォームコンポーネント:

import React, { Component } from 'react';

class Form extends Component {
    constructor() {
        super();

        this.state = {
            name: this.props.name,
            email: this.props.email
        };

        this.handleChange = this.handleChange.bind(this);
        this.addPerson = this.addPerson.bind(this);

    /*    this.formSubmit = this.formSubmit.bind(this); */
    }

    handleChange(e) {
        this.setState({[e.target.id]: e.target.value})
    }

    addPerson(name, email) {
        this.props.addPerson(name, email);
        this.setState({name: '', email: ''});
    }

    render() {
        return (
            <form>
                <input id='name' type='text' name={this.state.name} placeholder='Name...'/>
                <input id='email' type='text' email={this.state.email} placeholder='Email...'/>
                <input onClick={() => this.addPerson(this.state.name, this.state.email)} type='submit' value='submit'/>
            </form>
        )
    }

}

export default Form;

そして今、フォーム送信のためにテーブルにデータを追加したい、または必要に応じてテーブルのデータを削除したい。私はこの瞬間に立ち往生しました...

Arup Rakshit

私はあなたのコードを次のように書き直します。

Formコンポーネントを制御されていないコンポーネントとして作成しますつまり、フォーム入力は、変更しても独自の内部状態を維持します。2つの異なるデータソースを維持する必要はありません。したがって、親コンポーネントのApp状態に依存しますまた、送信時に入力値を取得するフォーム送信ハンドラーを追加し、addPersonからメソッドを呼び出して、ルートコンポーネントによって維持されAppているpeople状態に名前を追加しますApp

deletePersonリストから人を削除するメソッドを追加しましたこれが2つのコンポーネントのようです。

deletePersonここでの方法は、人のリストに一意の電子メールを持つ人が含まれるという事実に依存しています。あなたもkey小道具としてそれを選ぶようにただし、この基準はいつでも変更できます。これは、コードの現在のフローを理解していれば簡単です。

App.js

import React, { Component } from "react";
import Form from "./Form";

class App extends Component {
  constructor(props) {
    super(props);

    this.state = {
      people: []
    };

    this.addPerson = this.addPerson.bind(this);
    this.deletePerson = this.deletePerson.bind(this);
  }

  addPerson(name, email) {
    this.setState(prevState => ({
      people: [...prevState.people, { name, email }]
    }));
  }

  componentDidMount() {
    this.getPeople();
  }

  getPeople() {
    fetch("https://jsonplaceholder.typicode.com/users")
      .then(response => response.json())
      .then(response => this.setState({ people: response }))
      .catch(error => console.log(error));
  }

  deletePerson(email) {
    return () => {
      this.setState(prevState => ({
        people: prevState.people.filter(person => person.email !== email)
      }));
    };
  }

  render() {
    console.log(this.state);

    return (
      <div className="App">
        <Form addPerson={this.addPerson} />
        <table>
          <thead>
            <tr>
              <th>LP</th>
              <th>USER</th>
              <th>EMAIL</th>
              <th>Actions</th>
            </tr>
          </thead>
          <tbody>
            {this.state.people.map((person, index) => {
              return (
                <tr key={person.email}>
                  <th>{index + 1}</th>
                  <td>{person.name}</td>
                  <td>{person.email}</td>
                  <td>
                    <button onClick={this.deletePerson(person.email)}>
                      Delete
                    </button>
                  </td>
                </tr>
              );
            })}
          </tbody>
        </table>
      </div>
    );
  }
}

Form.js

import React, { Component } from "react";

class Form extends Component {
  constructor() {
    super();
    this.formSubmit = this.formSubmit.bind(this);
  }

  formSubmit(event) {
    event.preventDefault();
    const form = event.target;
    const email = form.elements["email"].value;
    const name = form.elements["name"].value;
    this.props.addPerson(name, email);
    form.reset();
  }

  render() {
    return (
      <form onSubmit={this.formSubmit}>
        <input
          id="name"
          type="text"
          defaultValue=""
          placeholder="Name..."
        />
        <input
          id="email"
          type="text"
          defaultValue=""
          placeholder="Email..."
        />
        <input type="submit" value="submit" />
      </form>
    );
  }
}

export default Form;

Codesandboxデモを確認してください

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

React:ターゲットテーブルの行を削除すると、常に最初の行が削除されます

分類Dev

MERN-Reactデータテーブルコンポーネントのアイテム/行を削除します

分類Dev

Reactのテーブルにテーブル行を追加する

分類Dev

MysqlのデータをReactテーブルに表示する方法

分類Dev

REACT.JSがカスタムテーブルのヘッドとボディにデータを入力

分類Dev

ReactのAntdテーブル

分類Dev

テーブルへの列とデータの追加

分類Dev

React-router:クリック可能なデータテーブルの行として<Link>を使用する

分類Dev

Reactjs-reactクラスとしてのantdテーブルフィルター

分類Dev

Reactテーブルの行データをOnclickで取得する方法

分類Dev

reactでテーブルにデータを追加できません

分類Dev

jsonファイルからreact-nativeピッカーアイテムへのデータの表示

分類Dev

react-virtualizedテーブル内のサーバー側データの形式の変更

分類Dev

React.jsテーブル:行の削除ボタンは、誤った行を視覚的に削除します

分類Dev

カートへの既存のアイテムの追加(React-Redux)

分類Dev

react.jsのmdbデータテーブルのセルの幅をリセットする方法

分類Dev

Reactテーブルの特定のアイテムを削除しますか?

分類Dev

react reduxとモーダルフォームを使用してテーブル内のデータを更新するにはどうすればよいですか?

分類Dev

Reactのデータテーブルとしてオブジェクトの配列を含むレンダリング配列

分類Dev

React - テーブルの数行と REACTDOM エラーを返す

分類Dev

React MaterialUIテーブルでのボタンの使用

分類Dev

ページへのパラメーターとしてのReact履歴プッシュデータ

分類Dev

動的なフォームの追加と削除、新しいデータ、UIはReactの新しいものではありません

分類Dev

JestとEnzymeを使用したReactルーターのテスト

分類Dev

分割されたBigQueryテーブルへのデータの追加とクエリ

分類Dev

RoomデータベーステーブルへのPOJOの追加

分類Dev

ReactルーターとExpressの競合

分類Dev

Reactルーターとの混乱

分類Dev

JavaScriptオブジェクトからReactでデータのテーブルをレンダリングする

Related 関連記事

  1. 1

    React:ターゲットテーブルの行を削除すると、常に最初の行が削除されます

  2. 2

    MERN-Reactデータテーブルコンポーネントのアイテム/行を削除します

  3. 3

    Reactのテーブルにテーブル行を追加する

  4. 4

    MysqlのデータをReactテーブルに表示する方法

  5. 5

    REACT.JSがカスタムテーブルのヘッドとボディにデータを入力

  6. 6

    ReactのAntdテーブル

  7. 7

    テーブルへの列とデータの追加

  8. 8

    React-router:クリック可能なデータテーブルの行として<Link>を使用する

  9. 9

    Reactjs-reactクラスとしてのantdテーブルフィルター

  10. 10

    Reactテーブルの行データをOnclickで取得する方法

  11. 11

    reactでテーブルにデータを追加できません

  12. 12

    jsonファイルからreact-nativeピッカーアイテムへのデータの表示

  13. 13

    react-virtualizedテーブル内のサーバー側データの形式の変更

  14. 14

    React.jsテーブル:行の削除ボタンは、誤った行を視覚的に削除します

  15. 15

    カートへの既存のアイテムの追加(React-Redux)

  16. 16

    react.jsのmdbデータテーブルのセルの幅をリセットする方法

  17. 17

    Reactテーブルの特定のアイテムを削除しますか?

  18. 18

    react reduxとモーダルフォームを使用してテーブル内のデータを更新するにはどうすればよいですか?

  19. 19

    Reactのデータテーブルとしてオブジェクトの配列を含むレンダリング配列

  20. 20

    React - テーブルの数行と REACTDOM エラーを返す

  21. 21

    React MaterialUIテーブルでのボタンの使用

  22. 22

    ページへのパラメーターとしてのReact履歴プッシュデータ

  23. 23

    動的なフォームの追加と削除、新しいデータ、UIはReactの新しいものではありません

  24. 24

    JestとEnzymeを使用したReactルーターのテスト

  25. 25

    分割されたBigQueryテーブルへのデータの追加とクエリ

  26. 26

    RoomデータベーステーブルへのPOJOの追加

  27. 27

    ReactルーターとExpressの競合

  28. 28

    Reactルーターとの混乱

  29. 29

    JavaScriptオブジェクトからReactでデータのテーブルをレンダリングする

ホットタグ

アーカイブ