我状态树中的几乎每个对象都需要包含以下字段:
日期字段很容易在动作创建者中添加。似乎已经达成共识,即行动创造者是允许不纯洁的地方,即new Date()
。
但是当前登录的用户不容易被提取,因为这些数据存在于该州的另一个片段中。
示例状态:
profile
data
guid
firstname
...
media
items
0: guid, createdByGuid, ...
1: guid, createdByGuid, ...
drawings
items
...
当调度MEDIA_ADD操作时,我希望操作创建者使用createdById扩充调度的数据。需要从profile.data.guid
获取当前用户。
我不想把这个州带入我的行动创作者。相反,我可以通过getState()使用thunk来获取状态。但这似乎是一种笨拙的方式来获得一个简单的guid常量(本次会话的常量)。当基本上所有用于向状态添加数据的动作创建者都需要成为thunk时,它变得更加笨拙。
我倾向于创建一个单独的全局单例对象来保存这些数据,并将此依赖关系带入我的所有动作创建器模块中。就例如测试而言,这似乎不那么令人不安了。
我想大多数Redux用户对当前用户都有同样的问题。什么是好的解决方案?
我正在使用react-native工作,但我认为这个问题适用于大多数Redux应用程序。
答案 0 :(得分:0)
如果有人有兴趣,我会采用单身方式。根据定义,它不是真正的单身人士,但它符合我的需要。
当用户登录时,我在异步操作创建者(thunk)中处理此问题。在使用服务器成功验证用户后,thunk调用setGlobalCurrentUser()。
要掌握当前用户,我只需要从currentUser.js导入currentUserGuid(),而且我不会在依赖地狱中结束。
<强> currentUser.js:强>
let _currentUserGuid;
export function currentUserGuid() {
if(!_currentUserGuid) throw new Error('currentUserGuid:: No logged in user')
return _currentUserGuid;
}
export function setGlobalCurrentUser(user) {
if(user) {
_currentUserGuid = user.get('guid')
} else {
_currentUserGuid = null
}
}