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

クリスモンゴメリー

React.jsを使用して、テキストボックスを含むhtmlテーブルを動的に作成しています。ボタンをクリックするだけで削除できる行があります。最初の行で[削除]をクリックすると、行1が削除された状態でテーブルが再レンダリングされると思います。ただし、reactがテーブルを再描画すると、stateオブジェクトの実際の値を使用するのではなく、常にテーブルの最後の行がDOMから削除されるように見えます。おそらく私はバグを見つけましたか?これが私のコードです:

/** @jsx React.DOM */

var MyApp = React.createClass({
    getInitialState: function () {
      return {
        col_one: ['c1r1', 'c1r2', 'c1r3'],
        col_two: ['c2r1', 'c1r2', 'c1r3'],
        col_three: ['c3r1', 'c3r2', 'c3r3']
      }
    },
    handleCellChange: function (colName, index, e) {
      console.log('onChange:', colName, index, e.target.value);
    },
    handleRemove: function (i) {
      var that = this;
      console.log('removing row:',i);
      _.forEach(this.state, function (val, colName) {
        that.state[colName].splice(i,1); // BUG???
        //_.pullAt(that.state[key], i); // doesn't work either
      });
      console.log(this.state);
      this.setState(this.state);

    },
    render: function() {
      var that = this,
        rows = [],
        cols = _.keys(this.state);

      rows.push(
      <tr>
      {cols.map(function (col) {
        return (
          <th>{col}</th>
        )
      })}
      </tr>
      )
      for (var i = 0; i < this.state[cols[0]].length; i++) {
        rows.push(
          <tr>
            {cols.map(function (col) {
              return (
                <td>
                  <input type="text" defaultValue={that.state[col][i]} onChange={that.handleCellChange.bind(that, col, i)} />
                </td>
              )
            })}
            <td>
              <button onClick={this.handleRemove.bind(this, i)}>Remove</button>
            </td>
          </tr>
        )
      }

      return (
        <table>
          <tbody>
            {rows}
          </tbody>
        </table>
      );
    }
});

React.renderComponent(<MyApp />, document.body);

ここではJSBinとして見られます

ジョニー・ブキャナン

使用しているdefaultValue-これは入力を制御されていないコンポーネントにします。これは初期値が設定されますが、コンポーネント全体を吹き飛ばさない限り(たとえば、コンポーネントkeyまたは祖先を変更して)、表示された値がReactによって再び変更されることはありません。ゼロから再作成します。

新しいものdefaultValueが表示されないのはそのためです-各行に一意のキーがないため、Reactは再レンダリング時に行が1つ少ないことを検出し、実際のDOMから最後の行を削除しますdefaultValueが、保持されている入力の新しいものすべて削除します行は効果がありません。

これは同じコードですが、を使用してvalue再レンダリング時に取得した新しいものを反映する制御されたコンポーネントvalueになります。

http://jsbin.com/hacitidaqe/1/

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

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

分類Dev

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

分類Dev

ReactコンポーネントのonClickイベントで特定のテーブル行を削除します

分類Dev

React.jsでテーブル行を動的に追加および削除する方法

分類Dev

React-Router-実行時にルートを追加/削除します

分類Dev

マテリアルテーブルの右上に「プラスボタン」を追加してreactを実行し、reactで特定の関数を呼び出す方法

分類Dev

リストの途中でアイテムを削除すると、Reactは間違ったデータをレンダリングします

分類Dev

React Native ListView:削除時に間違った行が削除されました

分類Dev

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

分類Dev

React-チェックボックスに基づいてデータの行を新しいテーブルに移動します

分類Dev

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

分類Dev

ボタンに行を追加してReactを押します

分類Dev

React-admin:SimpleFormのカスタムツールバーを削除または追加します

分類Dev

誤った配列インデックスがreact / reduxを削除しています

分類Dev

facebook / react-native / Examplesからサンプルを実行すると、「ファイルの変更を監視中にエラーが発生しました:EMFILE」

分類Dev

React.js:削除ボタンが機能しないのはなぜですか?

分類Dev

Reactでアイテムを削除した後、テーブルをリロードします

分類Dev

React行で動的に作成されたテーブルデータを取得する

分類Dev

RerenderはReactのデータを削除します

分類Dev

テーブル行にデータを表示しないReact

分類Dev

react-bootstrap-tableのボタンで行データを取得します

分類Dev

Angular4のテーブルの行を削除する方法。削除ボタンは各行にあります

分類Dev

Reactサーバー側のレンダリングは誤ったコンテンツをレンダリングします

分類Dev

選択したオプション値をユーザーが削除ボタンに渡す:React

分類Dev

react.jsのDOMを削除します。

分類Dev

行ごとにデータをフィルタリングする方法は?検索入力メソッドを使用して、react.jsにユーザーが入力した内容に基づいて行を即座に更新します

分類Dev

React Native:行アイテムでトグルボタンが押されたときにFlatListをレンダリングします

分類Dev

Reactで特定のテーブル行をフィルタリングする

分類Dev

React-Nativeタブバー:水平線を削除します(React Native UI Kitten + React Navigation)

Related 関連記事

  1. 1

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

  2. 2

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

  3. 3

    ReactコンポーネントのonClickイベントで特定のテーブル行を削除します

  4. 4

    React.jsでテーブル行を動的に追加および削除する方法

  5. 5

    React-Router-実行時にルートを追加/削除します

  6. 6

    マテリアルテーブルの右上に「プラスボタン」を追加してreactを実行し、reactで特定の関数を呼び出す方法

  7. 7

    リストの途中でアイテムを削除すると、Reactは間違ったデータをレンダリングします

  8. 8

    React Native ListView:削除時に間違った行が削除されました

  9. 9

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

  10. 10

    React-チェックボックスに基づいてデータの行を新しいテーブルに移動します

  11. 11

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

  12. 12

    ボタンに行を追加してReactを押します

  13. 13

    React-admin:SimpleFormのカスタムツールバーを削除または追加します

  14. 14

    誤った配列インデックスがreact / reduxを削除しています

  15. 15

    facebook / react-native / Examplesからサンプルを実行すると、「ファイルの変更を監視中にエラーが発生しました:EMFILE」

  16. 16

    React.js:削除ボタンが機能しないのはなぜですか?

  17. 17

    Reactでアイテムを削除した後、テーブルをリロードします

  18. 18

    React行で動的に作成されたテーブルデータを取得する

  19. 19

    RerenderはReactのデータを削除します

  20. 20

    テーブル行にデータを表示しないReact

  21. 21

    react-bootstrap-tableのボタンで行データを取得します

  22. 22

    Angular4のテーブルの行を削除する方法。削除ボタンは各行にあります

  23. 23

    Reactサーバー側のレンダリングは誤ったコンテンツをレンダリングします

  24. 24

    選択したオプション値をユーザーが削除ボタンに渡す:React

  25. 25

    react.jsのDOMを削除します。

  26. 26

    行ごとにデータをフィルタリングする方法は?検索入力メソッドを使用して、react.jsにユーザーが入力した内容に基づいて行を即座に更新します

  27. 27

    React Native:行アイテムでトグルボタンが押されたときにFlatListをレンダリングします

  28. 28

    Reactで特定のテーブル行をフィルタリングする

  29. 29

    React-Nativeタブバー:水平線を削除します(React Native UI Kitten + React Navigation)

ホットタグ

アーカイブ