如何使用 Redux React Native 中状态树不同分支的元素计算数据?
How to compute data using elements from different branch of state tree in Redux React Native?
我是 React、React Native 和 Redux 的新手,所以在过去的几天里,我一直在努力思考这些新闻概念。
我现在 运行 遇到的一个问题是在 Action Creator 中计算新数据,然后将其包装在 action 对象上并传递到 reducer 中,这需要来自其他 b运行ch 的一段数据在状态树中。你通常会如何解决这个问题?更改全局状态树的结构或将此数据映射到需要它的组件?
给定状态树:
{
ListView:{
dataSource : a ListView.DataSource type
}
SubmitForm:{
title : 'name of title',
text : 'description'
}
isFetchingData: true/false
}
据推测,每个 b运行ch 由不同的 reducer 处理,每个 b运行ch 的数据作为 props 传递到单独的组件中。
场景如下(我正在 运行 将 React tutorial 设置为使用 Redux 的 React Native ):
- 在 SubmitForm 中单击提交按钮
- --> 调度一个动作来通知商店数据正在发送,然后异步抓取并将 {title,text} 发送到 API 服务器。
- 成功后 ---> 计算从 API 服务器返回的数据源并将结果数据源传递给 reducer(根据教程)。通过计算数据源,我的意思是 dataSource.cloneWithRows(....)(解释为 here),这需要来自 ListView 的数据源,如上所示。
所以我的想法是 Form 组件不应该有一个名为 dataSource 的道具,因为它来自状态树中的另一个 b运行ch。但是没有它,我不确定如何获得所需的数据源。根据我对 Redux 模式的理解,更改(在这种情况下合并 ListView 和 SubmitForm)状态树的结构也将是 st运行ge。那么有人可以帮我解决这个问题吗?谢谢
之前也想过这个问题,我觉得这可能是个办法
例如。
您有商店的 actionA、reducerA 和 branchA。
您有商店的 actionB、reducerB 和 branchB。
现在您想同时读取branchA和branchB并更改它们。
好的,让我们定义两个动作。
一个在actionA(sub-actionA)中,改变branchA。
另一个在 actionB(sub-actionB) 中,改变 branchB.
然后,定义一个总动作(total-action),它会依次调用子动作A和子动作B。
最后一个问题是"How to read branchB in the sub-actionA"。
ok,我们可以使用store的方法'getState'。
我们将商店导入到 actionA 中,然后调用
store.getState()
它将 return 整个商店树。
这是一个常见问题,在 Redux FAQ 中可以方便地找到答案。
简短版本:combineReducers
通过 domain/slice-of-state 解决了拆分 reducer 功能的简单用例。您已经超越了这一点,现在需要添加自定义的额外顶级 reducer 逻辑来处理此操作,或者在操作本身中包含额外的所需数据。
谢谢大家。我认为我通过使用 redux-thunk 找到了最佳解决方案(好吧,我实际上是在使用 redux-thunk 来处理异步操作,但没有充分阅读 api)。基本上 thunk 也注入了 getState,所以基本上调用 getState() 将使我能够访问全局状态树,这应该可以解决我的问题。
const actionCreator = (args) => {
return (dispatch,getState) => {
// dispatch action to notify store that data is being sent
fetch(url)
.then((response) => response.json())
.then((resData) => {
// dispatch action to notify data received
// compute new data using resData and current dataSource accessed by getState().ListView.dataSource
})
}
}
我是 React、React Native 和 Redux 的新手,所以在过去的几天里,我一直在努力思考这些新闻概念。
我现在 运行 遇到的一个问题是在 Action Creator 中计算新数据,然后将其包装在 action 对象上并传递到 reducer 中,这需要来自其他 b运行ch 的一段数据在状态树中。你通常会如何解决这个问题?更改全局状态树的结构或将此数据映射到需要它的组件?
给定状态树:
{
ListView:{
dataSource : a ListView.DataSource type
}
SubmitForm:{
title : 'name of title',
text : 'description'
}
isFetchingData: true/false
}
据推测,每个 b运行ch 由不同的 reducer 处理,每个 b运行ch 的数据作为 props 传递到单独的组件中。
场景如下(我正在 运行 将 React tutorial 设置为使用 Redux 的 React Native ):
- 在 SubmitForm 中单击提交按钮
- --> 调度一个动作来通知商店数据正在发送,然后异步抓取并将 {title,text} 发送到 API 服务器。
- 成功后 ---> 计算从 API 服务器返回的数据源并将结果数据源传递给 reducer(根据教程)。通过计算数据源,我的意思是 dataSource.cloneWithRows(....)(解释为 here),这需要来自 ListView 的数据源,如上所示。
所以我的想法是 Form 组件不应该有一个名为 dataSource 的道具,因为它来自状态树中的另一个 b运行ch。但是没有它,我不确定如何获得所需的数据源。根据我对 Redux 模式的理解,更改(在这种情况下合并 ListView 和 SubmitForm)状态树的结构也将是 st运行ge。那么有人可以帮我解决这个问题吗?谢谢
之前也想过这个问题,我觉得这可能是个办法
例如。 您有商店的 actionA、reducerA 和 branchA。 您有商店的 actionB、reducerB 和 branchB。
现在您想同时读取branchA和branchB并更改它们。
好的,让我们定义两个动作。
一个在actionA(sub-actionA)中,改变branchA。 另一个在 actionB(sub-actionB) 中,改变 branchB.
然后,定义一个总动作(total-action),它会依次调用子动作A和子动作B。
最后一个问题是"How to read branchB in the sub-actionA"。
ok,我们可以使用store的方法'getState'。
我们将商店导入到 actionA 中,然后调用
store.getState()
它将 return 整个商店树。
这是一个常见问题,在 Redux FAQ 中可以方便地找到答案。
简短版本:combineReducers
通过 domain/slice-of-state 解决了拆分 reducer 功能的简单用例。您已经超越了这一点,现在需要添加自定义的额外顶级 reducer 逻辑来处理此操作,或者在操作本身中包含额外的所需数据。
谢谢大家。我认为我通过使用 redux-thunk 找到了最佳解决方案(好吧,我实际上是在使用 redux-thunk 来处理异步操作,但没有充分阅读 api)。基本上 thunk 也注入了 getState,所以基本上调用 getState() 将使我能够访问全局状态树,这应该可以解决我的问题。
const actionCreator = (args) => {
return (dispatch,getState) => {
// dispatch action to notify store that data is being sent
fetch(url)
.then((response) => response.json())
.then((resData) => {
// dispatch action to notify data received
// compute new data using resData and current dataSource accessed by getState().ListView.dataSource
})
}
}