Как получить данные из выбранной строки в таблице React MUI Data-Grid с помощью Axios

Я пытаюсь использовать пример здесь, чтобы добавить функциональность selectedRow из @mui/x-data-grid для возврата всех данных из выбранной строки. В демонстрации они используют мод useDemoData для заполнения таблицы, тогда как я использую Axios для вызова моего API для заполнения строк и использования предварительно настроенных столбцов.

import React, { useState, useEffect } from 'react';
import axios from "axios";
import { DataGrid, GridToolbar } from '@mui/x-data-grid';

const columns = [
    { field: 'id', headerName: 'Job ID', width: 170 },
    { field: 'file_name', headerName: 'File Name', width: 250 },
    { field: 'product_type', headerName: 'Product Type', width: 300 },    
    { field: 'status', headerName: 'Status', width: 170, editable: true },
];  

function QueueMgrTable() {
    const [data, setData] = useState([]);
    const [loadingData, setLoadingData] = useState(true);
    const [selectedRows, setSelectedRows] = useState([]);

    async function getData() {
        await axios
            .get('https://myendpoint.com/test/jobs', {
            headers: {
                'Content-Type': 'application/json'
            }
            })
            .then((response) =>{
                var test_data = response.data.data;
                setData(
                    test_data.map((x) => {
                        return {
                            id: parseInt(`${x.job_id}`),
                            file_name: `${x.file_name}`,
                            product_type: `${x.product_type}`,
                            status: `${x.status}`
                        }
                    })
                );
                setLoadingData(false);
            });
    }  
     
    useEffect((data) => {
        console.info(config);
        getData();
        if (loadingData) {
            getData();
        }
    }, []);

    return (
        <div style = {{ height: 600, width: '100%' }}>
            {loadingData ? (
                <p>Loading. Please wait...</p>
        ) : (    
            <DataGrid
            columns = {columns}
            pageSize = {20}
            rowsPerPageOptions = {[10]}
            checkboxSelection
            components = {{ Toolbar: GridToolbar }}
            onSelectionModelChange = {(ids) => {
                const selectedIDs = new Set(ids);
                const selectedRows = data.rows.filter((row) =>
                    selectedIDs.has(row.id),
            );
            setSelectedRows(selectedRows);
            }}
            rows = {data}
            />
        )}
    
        <pre style = {{ fontSize: 10 }}>
            {JSON.stringify(selectedRows, null, 4)}
        </pre>
        </div>
    );
};

export default QueueMgrTable;

Когда я нажимаю на строку выше, я получаю следующую ошибку. Любые предложения или подсказки относительно того, что я делаю неправильно здесь? Я подозреваю, что он пытается использовать фильтр, когда data по какой-то причине не определен из-за состояния.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
0
100
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Чтобы решить эту проблему, мне пришлось внести несколько простых изменений в следующий блок кода. Во-первых, я изменил const на let. Затем мне пришлось удалить rows из data.rows.filter((row) ..., так как он не был определен. Объект данных уже определен как массив, поэтому я могу использовать метод фильтра, чтобы найти правильные данные «строки» на основе id.

onSelectionModelChange = {(ids) => {
    let selectedIDs = new Set(ids);
    let selectedRows = data.filter((row) =>
        selectedIDs.has(row.id),
    );
    setSelectedRows(selectedRows);
}}

Это решило проблему с ошибкой и позволило мне правильно определить selectedIDs.

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

Похожие вопросы

Как изменить цвет текста компонента кнопки Ant Design, когда он отключен?
Шаблон хранилища Vuex/Redux — совместное использование одного источника данных в родительском и дочернем компонентах, для которых требуются вариации этих данных
Реагировать - Неверный вызов хука: преобразовать компонент приложения в функциональный компонент, все равно получить неверный вызов хука
Получение пустых массивов при выполнении запроса на получение с использованием axios
Использование функции Map внутри другой функции Map в React Js
Как я могу использовать разные цвета фона для каждой карты в моем списке карт?
Как использовать seState из дочернего компонента?
Как правильно обернуть компонент React, чтобы фиксировать события DOM, такие как щелчок, отправка и т. д., При пересылке дочерних элементов и ссылок в Typescript?
Как получить параметры URL в реагирующем маршрутизаторе V6?
Как я могу использовать файл svg в файле scss?