Обновить данные при использовании удаленных данных после пользовательских действий?

У меня есть специальное действие, которое вызывает вызов API для моего бэкэнда для удаления данных из моей базы данных, что, в свою очередь, удаляет элемент, отображаемый в базе данных. Как я могу получить данные таблицы для обновления при выполнении этого действия?

Это из таблицы материалов № 457.

Сначала я подумал о том, чтобы попытаться повторно выполнить рендеринг компонента, используя изменение setState, но это, похоже, не работает. (Я вижу, что состояние меняется соответственно, но таблица никогда не получает данные снова)

  {
                  icon: "delete",
                  tooltip: "Delete Partner",
                  onClick: (event, rowData) => {
                    console.log(rowData);
                    let data = {
                      entityId: rowData[0].entityId
                    };
                    fetch("/deleteEntity", {
                      method: "POST",
                      headers: {
                        "Content-Type": "application/json"
                      },
                      body: JSON.stringify(data)
                    }).then(response => {
                      if (response.status === 204) {
                        let index = currentSelectedRows.findIndex(
                          x => x.entityId === rowData[0].entityId
                        );
                        currentSelectedRows.splice(index, 1);
                        this.setState({ currentSelected: currentSelectedRows });
                        console.log("Partner Deleted");
                      } else if (response.status === 500) {
                        console.log("Something went wrong");
                      }
                    });
                  }
                }

2 ответа

Вы можете использовать tableRef и вызвать onQueryChange вручную. В этом примере кнопка вызывает функцию таблиц. Вы можете назвать это любым вашим действием:

class App extends Component {
  tableRef = React.createRef();

  state = {
      // set your initial data and columns here
  }

  render() {
    return (     
        <div style={{ maxWidth: '100%' }}>
              <MaterialTable
                ref={this.tableRef}
                columns={this.state.columns}
                data={this.state.data}
                title="Demo Title"             
              />
          <button
            onClick={() => {
              this.tableRef.current.onQueryChange();
            }}
          >
            ok
          </button>
        </div>
    );
  }
}

Мне удается повторно визуализировать таблицу, в основном отключая ее. Вот пример:

class MyStateComp extends React.Component {
  state = { loading: false }

  handleDelete = (event, rowData) => {
    this.setState({ loading: true })
    simulateAsyncDelete(event, rowData)
      .then(() => this.setState({loading: false}))
  }

  render() {
    loading
    ? <div>loading...</div>
    : <MaterialTable
        {/* other props */}
        actions={[
          {
            icon: 'delete',
            tooltip: 'Delete User',
            onClick: this.handleDelete
          }
        ]}
    />
  }
}

Я пытался заставить обновление с this.forceUpdate но это не сработало, я думаю, что данные извлекаются на componentDidMount состояние, которое очень ограничивает:(

Другие вопросы по тегам