首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法读取未定义的属性(读取“in”),同时在globalSelectors中使用createEntityAdapter中的redux工具箱的simpleSelectors

无法读取未定义的属性(读取“in”),同时在globalSelectors中使用createEntityAdapter中的redux工具箱的simpleSelectors
EN

Stack Overflow用户
提问于 2022-01-17 07:23:38
回答 1查看 1.1K关注 0票数 1

我正在学习Redux并使用createEntityAdapter作为一个简单的待办应用程序。问题是,每当我试图从全局选择器或/和todoAdapter的简单选择器访问todo时,都会出现错误。

我已经为此创建了一个CodeSandBox

这是我正在设置的todoReducer代码

代码语言:javascript
复制
const todosAdapter = createEntityAdapter({
  selectId: (todo) => todo._id,
});

const initialState = {
  fetching: true,
  error: null,
  addingNew: false,
};

const todosSlice = createSlice({
  name: 'todos',
  initialState: todosAdapter.getInitialState(initialState),
  reducers: {
    pushNewTodo: todosAdapter.addOne,
    addManyTodos: todosAdapter.addMany,
    removeTodo: todosAdapter.removeOne,
    editTodo: todosAdapter.updateOne,
  },
  extraReducers: { ... }
})

//* Errror in this line , 
export const globalTodosReducers = todosAdapter.getSelectors((st) => st.todos);
export const simpleTodosReducers = todosAdapter.getSelectors();

export const {
  addTodo,
  removeTodo,
  toggleTodo,
  editTodo,
  clearTodos
} = todosSlice.actions;
export default todosSlice.reducer;

当我想要使用simpleSelectors时,也会出现错误

代码语言:javascript
复制
// TodoApp.js
function TodoApp() {
  .
  .
  .
  // * Error in these lines
  // const todos = globalTodosReducers.selectAll();
  const todos = simpleTodosReducers.selectAll();


.
.
.

错误是

代码语言:javascript
复制
Cannot read properties of undefined (reading 'ids')
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-17 08:20:48

getSelectors返回的对象包含许多选择器函数。每个对象都需要传入包含要从中选择的数据的状态对象。你在这里有个正确的想法:

代码语言:javascript
复制
todosAdapter.getSelectors((st) => st.todos)

这告诉实体适配器访问传递给选择器函数的任何对象的todos属性,以便获得由适配器管理的数据。

调用选择器时,传入应用程序的根状态:

代码语言:javascript
复制
const todos = globalTodosReducers.selectAll(store.getState());

在React的上下文中,react redux的useSelector函数将为您完成以下操作:

代码语言:javascript
复制
const todos = useSelector(globalTodosReducers.selectAll);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70737788

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档