反应挂钩 axios 调用无法加载网格

react hooks axios call failing to load grid

我有以下代码,但我的网格没有加载以下代码,但没有错误。我相信这是由于异步 axios 调用造成的,但我无法弄清楚如何摆脱它。

import React, { useState } from "react";
import ReactDOM from "react-dom";
import ReactDataGrid from "react-data-grid";
import { Toolbar, Data } from "react-data-grid-addons";
import axios from 'axios';

const selectors = Data.Selectors;

function getRows(rows, filters) {
  return selectors.getRows({ rows, filters });
}

function Example() {
  let rows = [];
  let filteredRows = [];

  const [filters, setFilters] = useState({});

  React.useEffect(() => {
      async function anyNameFunction() {
        const response = await axios.get('/api/files/fileData/File12.txt');
        rows = response.data;
        filteredRows = getRows(rows, filters);
        console.log(filteredRows)         // this works fine and gets me the result
      }

      anyNameFunction();

  }, [])

  return (
    <ReactDataGrid             // this grid is empty
      columns={columns}
      rowGetter={i => filteredRows[i]}
      rowsCount={filteredRows.length}
      minHeight={500}
      toolbar={<Toolbar enableFilter={true} />}
      onAddFilter={filter => setFilters(handleFilterChange(filter))}
      onClearFilters={() => setFilters({})}
    />
  );
}

const rootElement = document.getElementById("root");
ReactDOM.render(<Example />, rootElement);

我正在关注这个 link 唯一的区别是我想从后端节点 api.

的文件加载数据

您正在使用 rows 和 filteredRows 作为数组。您的功能组件不知道发生了什么变化,因为您没有在状态中设置任何内容,因此没有理由在响应到达后重新呈现。

-----编辑----- 你真的不需要行,因为你没有在任何地方使用它。

尝试进行以下更改:

  const [filteredRows, setFilteredRows] = useState([]);
  const [filters, setFilters] = useState({});

  React.useEffect(() => {
      async function anyNameFunction() {
        const response = await axios.get('/api/files/fileData/File12.txt');
        setFilteredRows(getRows(response.data, {}));
      }

      anyNameFunction();

  }, [])

-----再次编辑----- 阅读完所有与网格包相关的内容后:

const [rows, setRows] = useState([]);
const [filters, setFilters] = useState({});

React.useEffect(() => {
      async function anyNameFunction() {
        const response = await axios.get('/api/files/fileData/File12.txt');
        setRows(response.data)
      }

      anyNameFunction();

  }, [])

const  filteredRows = getRows(response.data, filters);
return ....