ошибка слишком много повторных рендеров. react ограничивает количество рендеров, чтобы предотвратить бесконечный цикл

#javascript #reactjs #redux #state

#javascript #reactjs #redux #состояние

Вопрос:

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

 import React, { useState, useEffect } from 'react';
import { connect } from 'react-redux';
import { getTodos } from '../../actions/todo';

//Bootstrap Table
import BootstrapTable from 'react-bootstrap-table-next';
import paginationFactory from 'react-bootstrap-table2-paginator';
import * as ReactBootStrap from 'react-bootstrap';

const UserTable = ({ getTodos, todoList }) => {
  useEffect(() => {
    getTodos();
    // eslint-disable-next-line
  }, []);

  const [todos, setTodos] = useState([]);
  const [loading, setLoading] = useState(false);

  const columns = [
    { dataField: 'id', text: 'ID' },
    { dataField: 'userId', text: "User's ID" },
    { dataField: 'title', text: 'Title of Todo' },
    { dataField: 'completed', text: 'Is this done?' },
  ];

  setTodos(todoList);

  return (
    <BootstrapTable
      keyField='id'
      data={todos}
      columns={columns}
      pagination={paginationFactory()}
    />
  );
};

const mapStateToProps = (state) => ({
  todoList: state.todo.todoList,
});

export default connect(mapStateToProps, { getTodos })(UserTable);
  

Комментарии:

1. Это вызывает его setTodos(todoList); . Используйте его при инициализации с помощью const [todos, setTodos] = useState(todoList);

Ответ №1:

Подумайте о том, чтобы не устанавливать состояние непосредственно внутри тела функции — это приведет к бесконечному циклу.

В любом случае — почему вы хотите сохранить его внутри состояния? Я бы посоветовал вам поработать с реквизитами.

 return (
  <BootstrapTable
    keyField='id'
    data={todoList} // todos directly from props
    columns={columns}
    pagination={paginationFactory()}
  />
);
  

Комментарии:

1. Это сработало для меня, и я удалил const [todo, setTodos] = useState([]), и теперь я могу видеть данные.