使用 react-router-redux,似乎获取路由信息的唯一方法是仅通过 props。这是正确的吗?
这大致是我现在在我的应用程序中所做的事情:
<Provider store={Store}>
<Router history={history}>
<Route path="/" component={App}>
<Route path="child/:id" />
</Route>
</Router>
</Provider>
应用程序
const App = (props) =>
<div className="app">
<Header />
<Main {...props}/>
<Footer />
</div>
主要的
const Main = (props) =>
<div>
<MessageList {...props}/>
</div>
消息列表
let MessageList = (props) => {
const {id} = props;
// now I can use the id from the route
}
const mapStateToProps = (state, props) => {
return {
id: props.params.id
};
};
MessageList = connect(mapStateToProps)(MessageList)
我想做的是从我的所有组件中删除 {...props} ,并将 MessageList 变成这样:
let MessageList = (props) => {
const {id} = props;
// now I can use the id from the route
}
const mapStateToProps = (state) => {
return {
id: state.router.params.id
};
};
MessageList = connect(mapStateToProps)(MessageList)
对于 Redux 让我的应用程序变得多么干净,必须在所有东西中传递 props 感觉就像是一个很大的倒退。所以如果传递参数是正确的,我想知道为什么那更可取?
我提出这个问题的具体案例:
我有一个发送消息的 UserInput 组件(发送 SEND_MESSAGE 操作)。根据当前页面(聊天室、消息提要、单个消息等),reducer 应将其放在正确的位置。但是,使用 react-redux-router,reducer 不知道路由,所以它不知道将消息发送到哪里。
为了解决这个问题,我需要传递道具,将 id 附加到我的 SEND_MESSAGE 操作中,现在原本简单的 UserInput 正在处理我的应用程序的业务逻辑。