如何将状态从一个redux duck传递给另一个?

时间:2016-06-14 21:31:39

标签: react-native redux

我使用pepperoni-app-kit,它使用react-native,react-redux,redux-loop和其他各种东西。

我有一个Redux Duck负责身份验证。登录完成后,它会将一些重要的会话信息写入商店的['auth', 'env']部分。

我还有一个叫做浏览的鸭子负责浏览数据列表。该鸭子需要访问env数据才能发出服务器请求。

状态树看起来像这样:

state
  +-- auth
        +-- env
  +-- browse
        +-- ...

通过使用我的BrowseViewContainer ['auth','env'] connect()数据到视图,我可以弄明白如何将['auth','env']传递给我的BrowseView没问题。例如:

   connect(
      state => ({
        env: state.getIn(['auth', 'env']),
        ...
      })
    )(BrowseView)

但是,我不需要浏览器中的env,我需要在浏览器中使用它,因为鸭子是发出需要env的http请求的人。 / p>

将状态信息(env)从状态树的一部分(auth)传递到另一部分(browse)的最佳方法是什么?或者,我是否有更好的地方存储这些信息,而不是auth,以便更容易从其他鸭子那里获取?

1 个答案:

答案 0 :(得分:3)

事实证明,redux-thunk是一种方法,而且意大利辣味香肠-app-kit已经使用了redux-thunk。

我没有从我的动作创建者返回动作,而是返回一个thunk对象,thunk可以访问完整的状态树。

例如,我原来的动作创建者看起来像:

export function list () {
  const env = ??? // where to get env?
  return {
    type: LIST_RESPONSE,
    payload: getList(env)
  }
}

使用thunk重写了一个:

export function list () {
  return (dispatch, getState) => {
    const env = getState().get('auth').get('env')
    dispatch({
      type: LIST_RESPONSE,
      payload: getList(env)
    })
  }
}