简体   繁体   English

实体适配器 getSelectors 方法生成“无法读取未定义的属性‘映射’”错误

[英]Entity adapter getSelectors method generates "Cannot read property 'map' of undefined" error

I am trying to use createEntityAdapter from reduxjs/toolkit to generate selectors automatically.我正在尝试使用reduxjs/toolkit中的createEntityAdapter来自动生成选择器。

I have created a "select all" selector successfully using create selector :我使用create selector成功创建了一个“全选”选择器:

export const selectEnvironmentsResult = extendedApiSlice.endpoints.getEnvironments.select()

export const selectAllEnvironments = createSelector(
  selectEnvironmentsResult,
  environmentsResult => environmentsResult?.data ?? []
)

And works fine:并且工作正常:

const data = useSelector(selectAllEnvironments) // data is correctly defined :)

But, when I try to use createEntityAdapter to create the selectors:但是,当我尝试使用createEntityAdapter创建选择器时:

export const selectEnvironmentsResult = extendedApiSlice.endpoints.getEnvironments.select()

export const selectAllEnvironments = createSelector(
  selectEnvironmentsResult,
  environmentsResult => environmentsResult?.data ?? []
)


export const {
  selectAll,
  selectById,
  selectIds,
} = environmentsAdapter.getSelectors((state) => {
    const selected = selectAllEnvironments(state) ?? initialState
    console.log( selected ) // prints "[]"
    return selected
  }
)

and use it, I get an error:并使用它,我得到一个错误:

const data = useSelector(selectAll) // Uncaught TypeError: Cannot read property 'map' of undefined

The error was in the transformReponse value.错误出现在transformReponse值中。 You should use the adapter.setAll function:您应该使用adapter.setAll函数:

      transformResponse: (responseData) => {
        return adapter.setAll(adapter.getInitialState(), responseData)
      },

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM