Redux “存放在哪里?”;“当前用户”;全球可访问

Redux “存放在哪里?”;“当前用户”;全球可访问,redux,Redux,状态树中的几乎每个对象都需要具有以下字段: createdByGuid 创建数据 修改 日期字段很容易添加到动作创建者中。人们似乎一致认为,行动创造者是允许不纯洁的地方,即newdate() 但是当前登录的用户不容易获取,因为这些数据位于状态的另一个部分 举例说明: profile data guid firstname ... media items 0: guid, createdByGuid, ... 1: guid, createdBy

状态树中的几乎每个对象都需要具有以下字段:

  • createdByGuid
  • 创建数据
  • 修改
日期字段很容易添加到动作创建者中。人们似乎一致认为,行动创造者是允许不纯洁的地方,即
newdate()

但是当前登录的用户不容易获取,因为这些数据位于状态的另一个部分

举例说明:

profile
  data
    guid
    firstname
    ...
media
  items
    0: guid, createdByGuid, ...
    1: guid, createdByGuid, ...
drawings
  items
    ...
在调度媒体添加操作时,我希望操作创建者使用createdById来扩充调度的数据。当前用户需要从
profile.data.guid
获取

我不想把国家带入我的行动中。相反,我可以使用thunk通过getState()获取状态。但这似乎是一种获取简单guid常量(此会话的常量)的笨拙方法。当基本上我所有用于向状态添加数据的动作创建者都需要是thunks时,这会变得更加笨拙

我倾向于创建一个单独的全局单例对象来保存此数据,并将此依赖关系引入所有action creator模块。例如,就测试而言,这似乎是一个不那么令人不安的依赖关系

我想大多数Redux用户对于当前用户都有相同的问题。什么是好的解决方案


我在react native中工作,但我想这个问题适用于大多数Redux应用程序。

如果有人感兴趣,我会选择单例方式。不是一个真正的单身定义,但它适合我的需要

当用户登录时,我将在异步操作创建者(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
  }
}

如何通过会话来维护状态,比如“让我保持日志记录”功能?我正在使用Redux。登录用户和访问令牌通过异步存储与Radux存储的其余部分一起保存到磁盘。当存储从磁盘重新水化时,我调用setGlobalCurrentUser,这样我就可以访问userId,而不必从Redux中选择它。。。后来我离开了thunks,我只使用Redux Saga。