我对Redux有很好的理解。
有一件事我想知道在一个大型应用程序中会有多个动作和缩减器。
我的问题是
即使我看到redux流程,我也不明白这些问题
请清除我的困惑。
调度动作时如何找到合适的减速器?
调度操作时,如果使用组合减速器,则会触发所有减速器。适当的状态更改发生在树中,其中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传递回组件?
<Provider />
使Redux存储可用于任何已包含在connect()
函数中的嵌套组件。import { Provider } from 'react-redux';
const store = createStore(combineReducer(message, unread));
<Provider store={store}>
<App />
</Provider>
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.当一个动作被发送时,它如何找到合适的减速器?
所有操作都会通过应用程序中的所有reducers和中间件,这就是为什么如果某个reducer将处理某些操作,你有一个switch语句来处理。
2.减速机中是否有重复动作?
您可以根据需要调度操作并在多个Reducer中处理此操作。
3.如何将修改后的状态数据从reducer传递回组件?
当您通过connect
HOC连接组件与redux时,您正在将组件订阅到商店,商店的工作方式是当它更改时通知订阅的组件,然后执行mapStateToProps并为组件生成新数据(如果数据)已更改组件将更新,否则不会。
我希望对您有所帮助,如果您有任何疑问请告诉我。