Reactjs React Redux-条件选择器

Reactjs React Redux-条件选择器,reactjs,redux,reselect,Reactjs,Redux,Reselect,在我的应用程序中,我有许多只有在用户登录时才有意义的部分状态 当用户登录并直接导航到某个页面时,路由器会显示该页面,但必须进行异步调用,所以一部分状态尚未填充 现在,假设我必须在导航栏上显示一个按钮,该按钮必须包含该状态的一部分,但由于异步调用完成,因此该状态未填充 更实用的是,我有一个选择器: export const getSelectedCustomer = state => state.systems.selectedCustomer; export const getSelec

在我的应用程序中,我有许多只有在用户登录时才有意义的部分状态

当用户登录并直接导航到某个页面时,路由器会显示该页面,但必须进行异步调用,所以一部分状态尚未填充

现在,假设我必须在导航栏上显示一个按钮,该按钮必须包含该状态的一部分,但由于异步调用完成,因此该状态未填充

更实用的是,我有一个选择器:

export const getSelectedCustomer = state => state.systems.selectedCustomer;
export const getSelectedCustomerName = state => {
    return state.systems.entities[getSelectedCustomer(state)].customer;
}
这样就没有问题了,因为
selectedCustomer
initialState
reducer的一部分

此选择器中存在问题:

export const getSelectedCustomer = state => state.systems.selectedCustomer;
export const getSelectedCustomerName = state => {
    return state.systems.entities[getSelectedCustomer(state)].customer;
}
initialState
中的状态
实体
部分是空数组,将在异步调用时填充

因此,当应用程序启动并映射(使用connect-
MapStateTrops
)选择器
getSelectedCustomerName
时,我会收到错误,因为
实体
为空且肯定,
customer
字段还不存在

一个简单的解决方案,如果发生了一些
if-else
,但我必须在应用程序的“每个”部分都这样做

我在问是否有更好的解决方案来避免这种情况

const NullCustomerEntities = {
    customer: "Anonymous"
}

export const getSelectedCustomer = state => state.systems.selectedCustomer;

export const getCustomerEntities = state => {
    return state.systems.entities[getSelectedCustomer(state)] || NullCustomerEntities;
}

export const getSelectedCustomerName = state => {
    return getCustomerEntities(state).customer;
}

这是一个典型的示例(希望您不介意代码使用Ruby)。

偶然发现了这一点。喜欢JavaScript/Ruby并置。