此刻,我每次尝试打一条新路线时都试图致电componentDidMount
。但是当我更改路线然后返回到原始组件时,它不会再次调用cdm
。
有什么办法吗?
可以在必要时发布代码,但是我只想知道如何在每次路线更改时调用某个内容,就像我过去使用componentDidMount
这是用于反应本机navigation
的方式,据我所知,这种方式可以在正常的React中使用
答案 0 :(得分:0)
您可以订阅反应导航的焦点事件,并在导航到相关路线时做任何需要做的事情。
如何订阅的文档可以在react导航api参考中找到
:答案 1 :(得分:0)
我最近有一个类似的问题。就我而言,我认为问题主要与使用React Native的堆栈导航安装组件有关。仅当您在堆栈上时,componentDidMount才会被调用一次,并且直到您离开堆栈并返回到堆栈时才重新渲染。我将解决问题的方法放在下面:
/**
* @issue page does not refresh if its already been mounted on the navigation stack
* @todo listen to navigation events, and trigger refresh
* @todo get rid of componentDidMount, and instead
* have the navigation event handler trigger the refresh
因此,基本上,当您导航到给定页面时,不要使用componenDidMount()
,而是传递某种类型的导航参数,使该页面知道需要更新。
navigate('ExamplePage', { example: '<new Example>' })}
和ExamplePage
componentWillReceiveProps(nextProps) {
if (nextProps.navigation.state.params.example) {
this.props.retrieveData(this.props.example);
}
}
编辑/更新 在我看来,作为另一个选择和更好的解决方案,您可以收听NavigationEvents。这是文档,尽管没有很深入 https://reactnavigation.org/docs/en/navigation-events.html
因此,在我的情况下,我仍然会听从上一屏幕上的navigate
传入的导航参数。然后,通过在下面添加此代码,将刷新功能添加到onDidFocus
,每次页面出现在屏幕上时都会触发该刷新功能。
import {NavigationEvents} from 'react-navigation';
render() {
return (
...
<NavigationEvents onDidFocus={() => this._refresh()} />
...
)
}
使用此解决方案,您仍然可以在开始时仍然呼叫componentDidMount()
。而且您不必使用componentWillReceiveProps
,因为这是一个不好的习惯