如何在 TabNavigator 到达屏幕时启动功能? [反应导航]
How to launch function when screen in reached in TabNavigator ? [REACT NAVIGATION]
问题是函数 constructor() 和 componentDidMount() 在加载选项卡导航器时被调用。
例如,每次用户到达名为 myScreeen 的屏幕时,我都需要调用函数
我们该怎么做?
React-Navigation 提供了一个 onNavigationStateChange props that you can use to invoke methods when navigation state change. The screen tracking example 向您展示了一个示例,您可以在其中获取新状态的键和路由名称。
从例子中,在getCurrentRouteName
方法中,你可以做const route = navigationState.routes[navigationState.index];
一旦你检索到route
,你可以通过调用[=13]找出键和路由名称=] 和 route.routeName
.
我找到了 hack :
<Navigator
onNavigationStateChange={(prevState, currentState) => {
const getCurrentRouteName = (navigationState) => {
if (!navigationState) return null;
const route = navigationState.routes[navigationState.index];
if (route.routes) return getCurrentRouteName(route);
return route.routeName;
};
let currentRoute = getCurrentRouteName(currentState);
if(currentRoute == "A") {
console.log("TRIGGER")
}}/>;
然后您在组件中收听日志,如下所示:
componentDidMount() {
let slf = this;
let log = console.log;
console.log = function(txt) {
if(txt == "TRIGGER") {
slf.myFunction(); // CALL HERE YOUR FUNCTION
} else {
log.apply(console, arguments);
}
}
}
问题是函数 constructor() 和 componentDidMount() 在加载选项卡导航器时被调用。 例如,每次用户到达名为 myScreeen 的屏幕时,我都需要调用函数 我们该怎么做?
React-Navigation 提供了一个 onNavigationStateChange props that you can use to invoke methods when navigation state change. The screen tracking example 向您展示了一个示例,您可以在其中获取新状态的键和路由名称。
从例子中,在getCurrentRouteName
方法中,你可以做const route = navigationState.routes[navigationState.index];
一旦你检索到route
,你可以通过调用[=13]找出键和路由名称=] 和 route.routeName
.
我找到了 hack :
<Navigator
onNavigationStateChange={(prevState, currentState) => {
const getCurrentRouteName = (navigationState) => {
if (!navigationState) return null;
const route = navigationState.routes[navigationState.index];
if (route.routes) return getCurrentRouteName(route);
return route.routeName;
};
let currentRoute = getCurrentRouteName(currentState);
if(currentRoute == "A") {
console.log("TRIGGER")
}}/>;
然后您在组件中收听日志,如下所示:
componentDidMount() {
let slf = this;
let log = console.log;
console.log = function(txt) {
if(txt == "TRIGGER") {
slf.myFunction(); // CALL HERE YOUR FUNCTION
} else {
log.apply(console, arguments);
}
}
}