我对Redux有很好的了解。
我想知道的一件事是,在大型应用程序中,会有多个动作和化简。
我的问题是
在分派动作时如何找到合适的减速器?
Reducer中是否可以有重复的动作?
即使我看着redux流,我也不明白这些问题
请清除我的困惑。
答案 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中,您可以按所述进行操作。
修改后的状态数据如何从减速器传递回组件?
<Provider />
使Redux存储可用于connect()
函数中包装的所有嵌套组件。import { Provider } from 'react-redux';
const store = createStore(combineReducer(message, unread));
<Provider store={store}>
<App />
</Provider>
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);
希望我解决了您的困惑:)