【发布时间】:2016-06-02 05:18:27
【问题描述】:
我遇到了一个问题,因为我有一个相当复杂的组件来呈现项目列表。项目列表直接取自 redux 状态树。我想要 2 个单独的路由来重用同一个组件,但每个路由都将连接到状态树中的不同列表。
这是一个简化的例子:
从状态树开始:
state = {
fruits: ['apple', 'banana', 'grape', 'pear'],
vegetables: ['celery', 'carrot', 'cucumber']
}
和一个简单的列表组件
class ListView extends Component {
render() {
return (
<div>
{this.props.items.map((item, index) =>
<div key={index}>{item}</div>
)}
</div>
)
}
}
function mapStateToProps(state) {
return {
items: state.fruits
}
}
export default connect(mapStateToProps)(ListView)
更高级别的 App 组件如下所示:
class App extends Component {
render() {
return (
<div>
{this.props.children}
</div>
)
}
}
export default connect()(App)
路线看起来像这样:
<Route path='/' component={App}>
<IndexRedirect to='fruits' />
<Route path='fruits' component={ListView} />
<Route path='vegetables' component={ListView} />
</Route>
所以现在 ListView 组件连接到 redux 状态的水果部分。但是我想在这里使用路由结构,所以“/fruits”和“/vegetables”都将使用相同的组件,但“/fruits”将列出水果,而“/vegetables”将列出蔬菜。
显而易见的解决方法是创建一个全新且相同的组件类并更改 mapStateToProps 方法以连接到蔬菜数组。
有没有办法重用这个组件,但可以访问每个状态树的不同部分?
【问题讨论】:
-
对我的答案进行了更新,包括使用路由器中的组件。
标签: javascript reactjs react-router redux