2016-11-17 44 views
1

幾乎在我的狀態樹中的每個對象需要具有以下字段:如果保持 「當前用戶」 全局訪問

  • createdByGuid
  • createdAt
  • modifiedAt

日期字段易於添加到動作創作者中。似乎有一致意見認爲,行動創造者是允許不純的地方,即new Date()

但是當前登錄的用戶不容易被提取,因爲這些數據位於另一個狀態片段中。

實施例狀態:

profile 
    data 
    guid 
    firstname 
    ... 
media 
    items 
    0: guid, createdByGuid, ... 
    1: guid, createdByGuid, ... 
drawings 
    items 
    ... 

當MEDIA_ADD動作分派我想要的作用的創建者,以增加與createdById的調度數據。當前用戶需要從profile.data.guid獲取。

我不想把國家帶入我的動作創造者。相反,我可以使用thunk通過getState()獲取狀態。但是,這似乎是一個笨拙的方式來獲得一個簡單的GUID常量(本會話常量)。當我的所有動作創建者向狀態添加數據都需要變得更加笨拙時,它變得更笨拙。

我傾向於創建一個單獨的全局單例對象來保存這些數據,並將這個依賴關係帶入我的所有動作創建模塊。就例如測試而言,這似乎不太受干擾的依賴性。

我想大多數Redux用戶都有關於當前用戶的相同問題。什麼是好的解決方案?

我正在使用react-native,但我想這個問題適用於大多數Redux應用程序。

回答

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 
    } 
}