#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([]), и теперь я могу видеть данные.