我使用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
,以便更容易从其他鸭子那里获取?
答案 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)
})
}
}