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

时间:2019-04-25 13:12:37

标签: redux

我对Redux有很好的了解。

我想知道的一件事是,在大型应用程序中,会有多个动作和化简。

我的问题是

  • 在分派动作时如何找到合适的减速器?

  • Reducer中是否可以有重复的动作?

  • 修改后的状态数据如何从减速器传递回组件?

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

请清除我的困惑。

2 个答案:

答案 0 :(得分:0)

1。调度动作后,如何找到合适的减速器?

所有动作都通过应用程序中的所有reducer和中间件,这就是为什么要由某个reducer处理某些动作时要用switch语句处理的原因。

2。减速器中是否可以重复动作?

您可以调度一个动作,并根据需要在多个reducer中处理该动作。

3。修改后的状态数据如何从减速器传递回组件?

通过connect HOC将组件与redux连接时,您正在将组件订阅到存储中,并且存储的工作方式是当存储更改时通知已订阅的组件,然后执行mapStateToProps并生成新数据对于组件,如果数据已更改,则组件将被更新,否则不会被更新。

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

答案 1 :(得分: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()将常规的react组件连接到redux存储。然后将函数和全局存储状态变量作为prop传递到组件中。每次在全局存储区中更改时,它们都会传递到所有连接的组件中。
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);

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