Как обновить данные строки в Datatable?

#jquery #reactjs #datatable

#jquery #reactjs #datatable

Вопрос:

Я пытаюсь обновить строку в Datatable, используемую в моем приложении React.

Я сохраняю объект Datatable, а также выбранные строки, сохраненные в состоянии моего компонента React как this.state.myTable и this.state.selected .

Изначально я сохраняю объект Datatable следующим образом:

 var myTable = $('#myTable').DataTable({ ... });

this.setState({ myTable: myTable });
  

Я сохраняю выбранные строки при событии щелчка строки следующим образом:

 $('#myTable tbody').on('click', 'tr', function () {
    $(this).toggleClass('selected');
}).on('click', 'tr', function () {
    this.setState({ selected: this.state.myTable.rows('.selected') });
}.bind(this));
  

Я обновляю данные строки (согласно документам) следующим образом:

 function (newValue) {
    var data = this.state.selected.row().data();
    data.someValue = newValue
    this.state.selected.row().data(data).draw();
},
  

Но новые данные не отражаются в моей таблице данных, если я не обновлю какую-либо другую строку (но тогда обновляется только эта строка, а не эта строка).

Что я здесь делаю не так?

Ответ №1:

 $(document).ready(function () {
   $('#dataTable').on('click', '.update', function () {
        var tableRow = $('#dataTable').row($(this).parents('tr'));
        var rData = [
            test1,
            test1,
            '<a href="#" data-href="'   response.result[0].id   '" class="update">Update</a>',
            '<a href="#" data-href="'   response.result[0].id   '" class="delete">Delete</a>'
        ];
        $('#dataTable')
                .row( tableRow )
                .data(rData)
                .draw();
    });
});
  

Вы можете использовать этот код, он работал в наших проектах.

Ответ №2:

Ваше представление будет re-render всякий раз, когда есть change in the state . Поэтому, когда вы обновляете значение, просто используйте setState вместо прямого изменения состояния.

 function (newValue) {
    var dataType = {...this.state.selected};
    var data = dataType.row().data();
    data.someValue = newValue
    dataType.row().data(data).draw();
    this.setState({selected: dataType});
},