React native 无法从React navigation在useFocusEffect内部实现回调

React native 无法从React navigation在useFocusEffect内部实现回调,react-native,react-hooks,react-navigation,side-effects,react-lifecycle,React Native,React Hooks,React Navigation,Side Effects,React Lifecycle,我有一个带有三个选项卡的topTabNavigator的React本机应用程序。通常,当用户更改选项卡时,componentDidMount和componentWillUnmount生命周期方法不起作用。因此,我决定用React Navigation的WillFocus和onDidFocus来代替它们。在这个伟大的库的第五个版本之前,可以导入NavigationEvents组件并将其放在具有焦点回调的视图中: import { NavigationEvents } from 'react-nav

我有一个带有三个选项卡的topTabNavigator的React本机应用程序。通常,当用户更改选项卡时,componentDidMount和componentWillUnmount生命周期方法不起作用。因此,我决定用React Navigation的WillFocus和onDidFocus来代替它们。在这个伟大的库的第五个版本之前,可以导入NavigationEvents组件并将其放在具有焦点回调的视图中:

import { NavigationEvents } from 'react-navigation';

class MyTeamScreen {
  const store = this.props.store;
  const members = store.members;

  return (
  <View>
    <NavigationEvents
      onWillFocus={payload => store.getTeamMebers()}
      onDidFocus={payload => store.dispose()}
    />
    <MymebersList team={members} />
  </View>
 );
}
export default MyScreen;
类组件:

class MyTeamScreen {
  const store = this.props.store;
  const members = store.members;

  return (
  <View>
    <FetchMembers store={store} />
    <MymebersList team={members} />
  </View>
 );
}
classmyteamscreen{
const store=this.props.store;
const members=store.members;
返回(
);
}
但我得到了一个错误:

我检查了存储是在钩子内部初始化的,但是它不能从中调用方法,因为它是未定义的。
你能告诉我我做错了什么吗?使用react导航方法代替生命周期componentDidMount和componentWillUnmount是一种好方法吗?或者,您可以向我推荐一种更好的方法,当用户更改选项卡时如何实现副作用?

查看您的代码,我很好奇(但不是很确定)您是否引用了错误的道具

你介意试试这个吗? 因为功能组件的第一个参数是props。要参考
props.store
,可以像这样使用对象分解

函数FetchMembers({store}){
聚焦效应(
React.useCallback(()=>{
return()=>store.getMembers();
},[商店])
);
返回null;
}

函数获取成员(道具){
聚焦效应(
React.useCallback(()=>{
return()=>props.store.getMembers();
},[props.store])
);
返回null;
}
class MyTeamScreen {
  const store = this.props.store;
  const members = store.members;

  return (
  <View>
    <FetchMembers store={store} />
    <MymebersList team={members} />
  </View>
 );
}