英文:
React JS : Uncaught Error: Maximum update depth exceeded
问题
我正在尝试使用React-table在表格中显示数据,但页面是空白的,数据没有渲染出来。我已经仔细检查了代码,但似乎找不到问题所在。有人能否请审查我的代码,并帮助我找出可能出错的地方?
问题似乎与我如何使用react-table以及Redux来获取和显示数据有关。我怀疑列(columns)和数据(data)变量可能存在问题,或者可能与我如何使用react-table中的useTable有关。
任何帮助将不胜感激。谢谢!
英文:
I'm trying to display data on a table using React-table, but the page is blank, and the data is not rendering. I have checked the code thoroughly, but I can't seem to find the issue. Can someone please review my code and help me identify where it might be going wrong?
import React, { useState, useEffect, useMemo } from 'react';
import { useTable } from 'react-table';
import { useDispatch, useSelector } from 'react-redux';
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
import { COLUMNS } from './Column';
import NavigationDashbooard from './UsersNavigationBigScreen';
import Button from '../components/Button';
import { loading } from '../assets';
import { fetchingAllUsers } from '../states/features/users/usersSlice';
import NavigationDashboardSmall from './UsersNavigationSmallScreen';
const AdminManageUserContainer = () => {
  const dispatch = useDispatch();
  const { isPending, totalpages, userList, networkError } = useSelector(
    (state) => {
      return state.users;
    }
  );
   const columns = useMemo(() => {
    return (COLUMNS, [])
  });
  const data = useMemo(() => {
    return (userList, [])
  });
  const tableInstance = useTable({ columns: columns, data: data });
  const { getTableProps, getTableBodyProps, headerGroups, rows, prepareRow } =
    tableInstance;
  useEffect(() => {
    dispatch(fetchingAllUsers(1));
  }, []);
 
  return (
    <div className='manage_accounts_wrapper h-screen'>
      <NavigationDashbooard />
      <div className='manage_accounts_content'>
        <h1 className='bigTitle_users  mt-10'>Manage Users</h1>
        <div className='createUserBox mb-10'>
          <h1 className='listOfUsers '>List of users</h1>
          <Button
            className='primary-btn create_user_btn'
            value='+  Add user'
            route='/'
            onClick={() => {}}
          />
          <Button
            className='create_user_btn_small'
            value='+'
            route='/'
            onClick={() => {}}
          />
        </div>
        <div className='manage_accounts_content_table h-4.5/6'>
          <table {...getTableProps()}>
            <thead>
              {headerGroups.map((headerGroup) => {
                return (
                  <tr {...headerGroup.getHeaderGroupProps()}>
                    {headerGroup.headers.map((column) => {
                      return (
                        <th {...column.getHeaderProps()}>
                          {column.render('Header')}
                        </th>
                      );
                    })}
                  </tr>
                );
              })}
            </thead>
            <tbody {...getTableBodyProps()}>
              {rows.map((row) => {
                prepareRow(row);
                return (
                  <tr {...row.getRowProps()}>
                    {row.cells.map((cell  ) => {
                      return (
                        <td {...cell.getCellProps()}>{cell.render('Cell')}</td>
                      );
                    })}
                  </tr>
                );
              })}
            </tbody>
          </table>
          {isPending && (
            <div className='loading_div w-full'>
              Loading...
              <img src={loading} alt='' />
            </div>
          )}
          {networkError && (
            <div className='loading_div w-full'>
              Server or Network Error{' '}
              <FontAwesomeIcon icon='fa-solid fa-exclamation-circle' />
            </div>
          )}
        </div>
      </div>
      <NavigationDashboardSmall />
    </div>
  );
};
export default AdminManageUserContainer;
The problem seems to be related to how I am using react-table along with Redux to fetch and display data. I suspect there might be an issue with the columns and data variables, or possibly with the way I am using useTable from react-table.
Any help would be greatly appreciated. Thank you!
答案1
得分: 0
你在使用useMemo时没有正确获取列或数据。使用逗号分隔符表示:计算由逗号分隔的所有表达式并返回最后一个。
return (COLUMNS, [])
// 这将返回 []
你应该以正确的方式使用useMemo。第一个参数是一个返回值的函数,第二个是依赖数组。
const columns = useMemo(() => {
  return COLUMNS;
}, []);
// 返回dataList的简短方式
const data = useMemo(() => dataList, []);
英文:
You are not getting the columns or the data in the way you use your useMemo.
Using a comma separator stands for: valuate all the expressions separated by commas and return the last one.
return (COLUMNS, [])
// this returns []
You should use useMemo in the correct way. First argument is a function which return a value, second one is the dependency array.
const columns = useMemo(() => {
  return COLUMNS;
}, []);
// short way of returning dataList
const data = useMemo(() => dataList, []);
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。


评论