我似乎在任何地方都找不到这个问题的直接答案。
环境是React、Redux和React-Router。
一个<Link>
将点击到一个没有问题的组件并将其全部呈现出来。
使用this.context.router.push(url)
会导致相同的组件出错,并且不会呈现任何内容,但会更新浏览器历史记录和url。
新组件有一个mapStateToProps
函数和一个导出连接声明,如下所示:
export default connect(mapStateToProps, { fetchData, fetchOtherData })(ComponentName)
在使用router.push
时,导出似乎失败,并且没有为connect
的actions部分运行connect,这意味着fetchData
从不返回数据,然后应用程序在mapStateToProps
内部抛出错误,因为它期望从connect语句中连接的actions文件返回数据。
为什么router.push
与<Link>
的工作方式不同,我应该如何导航到一个新页面,这是一个新的容器组件,需要数据才能呈现该页面?
发布于 2016-08-18 19:39:42
在容器组件中,不建议声明contextTypes
,因为它可能会破坏现有的可用提供程序上下文。
所以我建议你这样写,
import { withRouter } from 'react-router'
const MyComponent = connect(mapStateToProps, { fetchData, fetchOtherData })(ComponentName)
export default withRouter(MyComponent)
为了更轻松地访问路由器对象,添加了withRouter高阶组件作为新的主要访问方式。与其他React.Component一样,它可用于任何类型的任何React组件(React.createClass、ES2015 HoC类、无状态功能组件)。
有关更多详细信息,请参阅官方documentation
https://stackoverflow.com/questions/39025217
复制相似问题