[英]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.