尝试从切片中检索数据时出现Redux错误:未捕获的类型错误:无法读取未定义的属性(阅读“list”)

uajslkp6  于 2023-08-05  发布在  其他
关注(0)|答案(1)|浏览(67)

我正在用ReactJS和Redux构建一个简单的todo应用程序,但是当我试图检索我添加到初始状态列表中的todo时,我得到了一个错误。错误如下:
未捕获的类型错误:无法读取未定义的属性(阅读“list”)
错误来自这一行:

export const selectTodos = (state) => state.todos.list;

字符串

切片代码:

import { createSlice } from "@reduxjs/toolkit";

const initialState = {
  list: [],
};

export const todosSlice = createSlice({
  name: "todos",
  initialState,

  reducers: {
    addTodo: (state, action) => {
      state.list = [...state.list, action.payload];
    },
  },
});

export const { addTodo } = todosSlice.actions;
export const selectTodos = (state) => state.todos.list;

export default todosSlice.reducer;

APP.JSX:

import React, { useRef } from "react";
import { useDispatch, useSelector } from "react-redux";
import { addTodo, selectTodos } from "./features/todos/todosSlice";

const App = () => {
  const inputRef = useRef(null);
  const todos = useSelector(selectTodos);
  const dispatch = useDispatch();

  const createTodo = async (e) => {
    e.preventDefault();

    const newTodo = inputRef.current.value;
    dispatch(addTodo(newTodo));
  };

  return (
    <div>
      <h1>Todo List</h1>
      <form>
        <input type="text" placeholder="task..." ref={inputRef} />
        <button onClick={createTodo}>Add Todo</button>
      </form>
      <h2>Your Todos:</h2>
      {todos}
    </div>
  );
};

export default App;

INDEX.JSX:

import React from "react";
import { createRoot } from "react-dom/client";
import { Provider } from "react-redux";
import { store } from "./app/store";
import App from "./App";
import "./index.css";

const container = document.getElementById("root");
const root = createRoot(container);

root.render(
  <React.StrictMode>
    <Provider store={store}>
      <App />
    </Provider>
  </React.StrictMode>
);

STORE.JS:

import { configureStore } from "@reduxjs/toolkit";
import todosReducer from "../features/todos/todosSlice";

export const store = configureStore({
  reducer: {
    todo: todosReducer,
  },
});


如果你有任何建议,请告诉我。

xvw2m8pv

xvw2m8pv1#

错误是我使用了错误的名称来访问列表。我用了“todos”而不是“todo”

相关问题