use*_*759 9 javascript reactjs react-router redux
我很难理解如何将redux与react-router一起使用.
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')
);
Run Code Online (Sandbox Code Playgroud)
App.js
import React, { Component } from 'react';
export default class App extends React.Component {
render() {
const { children } = this.props;
return (
<div>
Wrapper
{children}
</div>
);
}
}
Run Code Online (Sandbox Code Playgroud)
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>
);
}
}
Run Code Online (Sandbox Code Playgroud)
这引发了
未捕获的TypeError:无法读取未定义的属性"map"
我发现的唯一解决方案是使用它而不是{children}:
{this.props.children &&
React.cloneElement(this.props.children, { ...this.props })}
Run Code Online (Sandbox Code Playgroud)
这真的是正确的方法吗?
我通过在每个组件中显式映射状态与连接来解决这个问题:
export default connect(function selector(state) {
return {
cards: state.cards
};
})(Show);
Run Code Online (Sandbox Code Playgroud)
这样我就可以决定组件应该有权访问状态的哪些属性,从而减少对 props 的污染。但不确定这是否是最佳实践。
| 归档时间: |
|
| 查看次数: |
3355 次 |
| 最近记录: |