簡體   English   中英

Redux的商店外面的Redux州

[英]Redux state outside redux's store

我的情況是我的react-native應用程序有一些我想要顯示的圖像,

export const myImages = Map()
  .set('image-one, {
    name: 'Foo',
    source: require('./foo'),
  })
  .set('image-two, {
    name: 'Bar',
    source: require('./bar'),
  })

我讓我的用戶選擇有問題的圖像類型,如下所示:

export const selectImageSaga = function*({ imageId }) {
  yield put({ type: 'SELECT_IMAGE', imageId /* image-one, image-two, etc. */})

現在,在我的商店中,我引用了我想要顯示的圖像。 我可以調用myImages.get(reduxState.imageId)來獲取我想要的數據,一切都很好。 我真討厭這個。

現在我的saga和我的react組件都需要引用一個外部的(可能,我在這個例子中沒有顯示這個)可變對象來獲取他們需要的數據。

如果它不是source ,我只會存儲我感興趣的文件的路徑或uri,就是這樣,我會將所有狀態保存在redux中。

這里有什么替代方案?

這里沒有魔力,我看到了3個主要的行動途徑:

  1. 您的操作會發送所有必要信息。 這可以通過將責任移動到操作的調用者來完成,或者操作創建者本身將從外部可能可變對象獲取數據,將其標准化並將其傳遞給reducer。
  2. 您的reducer從操作中獲取ID,並將其與外部對象組合。 同樣,這意味着redux商店擁有所有必要的信息。
  3. 您的選擇器(或者如果您沒有選擇器,您的反應組件)接受ID並將其與您的外部對象組合。 如果您將商店保存到localStorage(因為那樣您只保留ID,而不是所有信息),這樣做效果很好

1的優點是你的reducer是愚蠢和無狀態的,獲取相關信息的邏輯是在動作創建者中完成的。

2的優點是......好吧,老實說,我想不起太多,如果你找到一個,請告訴我。

3的優點是您的商店仍然相對較小且簡單,這有助於服務器端呈現和localStorage持久性之類的事情。 但反過來,它會使你的React組件變得不那么純凈。


這里沒有靈丹妙葯,我擔心,您需要根據項目的需求和慣例做出決定。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM