React Redux-条件选择器

薄雾83

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

当用户登录并直接导航到页面时,路由器将显示该页面,但必须进行异步调用,因此尚未填充该状态的一部分。

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

更实际地说,我有这个选择器:

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

有了这个,就没有问题了,因为它selectedCustomerinitialState减速器的一部分

问题出在这个选择器中:

export const getSelectedCustomerName = state => {
    return state.systems.entities[getSelectedCustomer(state)].customer;
}

状态的部分entitiesinitialState是一个空数组和将在异步调用填充。

因此,当应用程序启动并且我映射(使用connect- mapStateToProps)选择器时,getSelectedCustomerName我得到了错误,因为它entities是空的并且确定,该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;
}

这是一个Null Object模式的经典示例(希望您不介意Ruby中的代码)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章