class Card extend Component {
componentDidMount() {
// call fetch function which probably updates your redux store
}
render () {
return // JSX or child component with {...this.props} used,
// some of which are taken from the store through mapStateToProps
}
}
6条答案
按热度按时间jecbmhm31#
将当前位置作为关键字放在组件上可解决此问题。
0sgqnhkj2#
我刚刚遇到了一个类似的问题。我想你是混淆更新/重新渲染和重新挂载。This图上的React生命周期方法帮助我当我处理它。
如果你的问题和我的问题一样,你有一个组件
当你第一次点击一个安装这个组件的网址时,一切都正常,然后,当你访问另一个使用相同组件的路径时,什么都没有改变。这是因为组件没有被重新安装,它只是被更新了,因为一些属性改变了,至少
this.props.match.params
在改变。但是
componentDidMount()
不会在组件更新时被调用(见上面的链接),所以你不会获取新的数据并更新redux存储,你应该添加一个componentDidUpdate()
函数,这样你就可以在属性改变时再次调用获取函数,而不仅仅是在组件最初被挂载时。有关详细信息,请查看react文档。
lymnna713#
其实我想到了另一种方法。
我们将从示例代码开始:
<Route path='/:code' component={Card}/>
您要做的是让
<Card>
成为一个 Package 器组件,最好是功能性的(我认为它实际上不需要任何状态),并通过将您的props传递给{...props}
来呈现您想要呈现的组件,以便它获得Router属性,但重要的是给予它一个key
prop,这将强制它从头开始重新呈现例如,我有一个类似这样的东西:
我希望组件在URL改变时重新呈现,但仅在customerid或serviceid改变时。因此,我将
Prices
制作成一个功能组件,如下所示:请注意,我的键只考虑customerid和serviceid--当这两个参数发生变化时,它会重新呈现,但当courierid发生变化时,它不会重新呈现(如果需要的话,只需将其添加到键中即可)。
q5lcpyga4#
如果您正在寻找一个使用挂钩的解决方案。
如果您要从某个API获取数据,则可以将该调用 Package 在
useEffect
块中,并将history.location.pathname
作为参数传递给useEffect
。编码:
react-router
的useHistory
挂钩将给予路径名,因此每次更改useEffect
(url)时都会调用它anauzrmj5#
如@theshubhagrwl所述,但您可以使用location.href而不是location.pathname在所有情况下工作
4dc9hkyq6#
在React Router v4中,在路由器修复问题后添加交换机标记