我已经使用了反应导航,并且在android中点击了硬件后退按钮,我回到了之前的组件,但是没有调用componentWillMount。如何确保调用componentWillMount?
答案 0 :(得分:0)
@bumbur的回答是否对您有帮助?它定义了一个全局变量,用于跟踪导航状态是否已更改。您可以插入一段代码以查看您是否在您感兴趣的特定选项卡中。您可以触发对componentWillMount()的调用吗?
如果您不想使用redux,这就是您可以在全球范围内存储的方式 有关当前路线的信息,因此您可以检测到标签更改 并告诉我哪个标签现在有效。
https://stackoverflow.com/a/44027538/7388644
export default () => <MyTabNav
ref={(ref) => { this.nav = ref; }}
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;
};
global.currentRoute = getCurrentRouteName(currentState);
}}
/>;
答案 1 :(得分:0)
componentWillMount将不会触发。
我的解决方案是使用事件导航器处理程序 https://wix.github.io/react-native-navigation/#/screen-api?id=listen-visibility-events-in-onnavigatorevent-handler
您可以在触发'willAppear'事件ID时实现'componentWillMount'代码,请参阅此实现:
def onValidate(self, d, i, P, s, S, v, V, W):
if self._is_number(S):
return True
else:
self.bell()
return False
def _add_widgets(self):
vcmd = (self.register(self.onValidate), '%d', '%i', '%P', '%s', '%S', '%v', '%V', '%W')
self.f_entry = ttk.Entry(self.window, width=5, validate="all", textvariable=self.fahrenheit, validatecommand=vcmd).grid(row=1, column=2)