Я использую опцию удаления строки для моей таблицы с данными API, и запрос на удаление работает хорошо, но мне нужно обновить страницу, чтобы обновить мои строки. Знаете ли вы, почему и что я могу сделать? я использую react-table-v7
const useTableResource = () => {
const {data} = apiData();
const resourcesData = data;
const resourcesDataLength = resourcesData.length;
const query = window.matchMedia('(max-width: 750px)');
const resourcesColumns = useMemo(() => [
{Header: 'Tittle', accessor: 'name'},
{
id: 'delete',
accessor: () => 'delete',
disableSortBy: true,
Cell: ({row}) => <div onClick = {(event) => event.stopPropagation()} style = {{
display: 'flex',
justifyContent: 'center'
}}>
<DeleteModal delb = {async () => {
await axios.delete(`api/resources?_id=${row.original._id}`);
}}/>
</div>
}
], []);
const tableInstance = useTable({
columns: resourcesColumns,
data: resourcesData, //here load the data for my table
disableSortRemove: true,
initialState: {
sortBy: [{id: 'resourceType.name', desc: false}],
pageSize: 10
}
}, useSortBy, usePagination);
return {
tableInstance,
resourcesColumns,
resourcesDataLength
};
};
export default useTableResource;
Мне нужно обновить страницу, чтобы обновить мои строки
Это потому, что вы не обновляете свои resourceData на основе выполняемой вами операции. И react повторно отображает компонент, если в состояние (resourceData) внесены какие-либо изменения.
Как я могу реагировать на повторную визуализацию компонента?
Один из способов — снова вызвать apiData() после успешной операции удаления и обновить состояние resourceData или, если вы считаете, что операция API является дорогостоящей, затем изменить состояние resourceData, чтобы удалить удаленный элемент.
@Mark, нашел эту ссылку в документации, которой вы поделились, где она демонстрирует использование состояния и обновление данных таблицы.
Есть несколько вариантов Вы можете либо повторно получить «resourceData», используя свой метод API после удаления. Что требует другого вызова API
Или обновите метод удаления, чтобы удалить данные из списка.
Если вы хотите использовать второй вариант, я бы рекомендовал использовать useState для управления состоянием resourceData.
Что-то вроде
Const {resourceData, setResourceData} = useState(data)
И в методе удаления
SetResourceData(resourceData.filter(record => record.id != id))
Я не знаю почему, но если я console.info resourceData, он показывает мне пустые массивы, но если я записываю данные, console.info показывает мне 5 пустых массивов и 3 массива с объектами данных
Я не использую useState, а если он работает с useRowState?
Как я решил эту проблему,
const [datos, setDatos] = React.useState(React.useMemo(() => data, []));
Мне пришлось использовать useEffect
useEffect(() => {
setDatos(data);
}, [data]);
Как сейчас написано, ваш ответ неясен. Пожалуйста, отредактируйте , чтобы добавить дополнительные сведения, которые помогут другим понять, как это отвечает на заданный вопрос. Вы можете найти больше информации о том, как писать хорошие ответы в справочном центре.
Я не использую useState для управления данными, а вы работаете с useRowState? ссылка