Redux如何将操作传递给特定的reducer

问题描述 投票:0回答:2

我对Redux有很好的理解。

有一件事我想知道在一个大型应用程序中会有多个动作和缩减器。

我的问题是

  • 调度动作时如何找到合适的减速器?
  • 可以在reducer中有重复的操作吗?
  • 修改后的状态数据如何从reducer传递回组件?

即使我看到redux流程,我也不明白这些问题

请清除我的困惑。

redux
2个回答
0
投票

调度动作时如何找到合适的减速器?

调度操作时,如果使用组合减速器,则会触发所有减速器。适当的状态更改发生在树中,其中action.TYPE与调度的action.TYPE匹配。

可以在reducer中有重复的操作吗?

让我们想一下聊天应用程序。让我们说当有新消息进来时,有两个商店叫做messageStore和unreadStore。还有一个名为NEW_MESSAGE的动作。所有两个商店将在接收新消息时更新。

message = (state=[], action) ->
  switch action.type
    when NEW_MESSAGE
      state # new state

unread = (state=[], action) ->
  switch action.type
    when NEW_MESSAGE
      state # new state

combineReducer {message, unread}

在同一个reducer中,您可以两次调度相同的操作,但这是不必要的。在不同的减速器中,您可以按照提到的方式进行。

修改后的状态数据如何从reducer传递回组件?

  1. 您的全球商店通过提供商传递给组件。根据redux文档,<Provider />使Redux存储可用于任何已包含在connect()函数中的嵌套组件。
import { Provider } from 'react-redux';
const store = createStore(combineReducer(message, unread));
<Provider store={store}>
   <App />
</Provider>
  1. 将全局存储传递给嵌套在其中的组件后,您可以使用connect()将正常的反应组件连接到redux存储。然后将函数和全局存储状态变量作为props传递到组件中。每次他们在全局存储中更改时,它们都会传递到所有连接的组件中。
class ReduxEmpl extends React.Component {
  render() {
    return <div>I'm connected</div>
  }
}

const mapStateToProps = state => ({ messages: state.message.messages })
const dispatchToProps = dispatch => ({ functionToDispatch: (params) => dispatch(functionToDispatch(params));

export default connect(mapStateToProps, mapDispatchToProps)(ReduxEmpl);

希望我解决了你的困惑:)


1
投票

1.当一个动作被发送时,它如何找到合适的减速器?

所有操作都会通过应用程序中的所有reducers和中间件,这就是为什么如果某个reducer将处理某些操作,你有一个switch语句来处理。

2.减速机中是否有重复动作?

您可以根据需要调度操作并在多个Reducer中处理此操作。

3.如何将修改后的状态数据从reducer传递回组件?

当您通过connect HOC连接组件与redux时,您正在将组件订阅到商店,商店的工作方式是当它更改时通知订阅的组件,然后执行mapStateToProps并为组件生成新数据(如果数据)已更改组件将更新,否则不会。

我希望对您有所帮助,如果您有任何疑问请告诉我。

© www.soinside.com 2019 - 2024. All rights reserved.