我很难理解如何与react-router一起使用redux。如何将redux状态传递给子路径?
index.js
[...]
// Map Redux state to component props
function mapStateToProps(state) {
return {
cards: state.cards
};
}
// Connected Component:
let ReduxApp = connect(mapStateToProps)(App);
const routes = <Route component={ReduxApp}>
<Route path="/" component={Start}></Route>
<Route path="/show" component={Show}></Route>
</Route>;
ReactDOM.render(
<Provider store={store}>
<Router>{routes}</Router>
</Provider>,
document.getElementById('root')
);
App.js
import React, { Component } from 'react';
export default class App extends React.Component {
render() {
const { children } = this.props;
return (
<div>
Wrapper
{children}
</div>
);
}
}
Show.js
import React, { Component } from 'react';
export default class Show extends React.Component {
constructor(props) {
super(props);
}
render() {
return (
<ul>
{this.props.cards.map(card =>
<li>{card}</li>
)}
</ul>
);
}
}
这将引发
Uncaught TypeError: Cannot read property 'map' of undefined
我发现的唯一的解决办法是改为使用{}儿童这个:
{this.props.children &&
React.cloneElement(this.props.children, { ...this.props })}
这真的是这样做的正确方法?
我认为你不需要在每个组件中完成它,只需要你的顶层和路由处理程序组件。在你的例子中,Show是一个Route Handler,因此使用connect(这就是所谓的智能或容器组件)总的来说很好。它下面的所有组件(演示组件或哑组件)应该从Smart组件获取它们的状态作为道具。 看看这里:http://redux.js.org/docs/basics/UsageWithReact.html – woolagaroo
可以请你给一些简单的例子,如何正确地做到这一点? – farukg