React navigation V6 文档展示了在 useFocusEffect 中使用 useCallback 的示例。但是,当我使用相同的代码时,我遇到了无效的挂钩调用。
链接:https ://reactnavigation.org/docs/use-focus-effect/
例子:
import { useFocusEffect } from '@react-navigation/native';
function Profile({ userId }) {
const [user, setUser] = React.useState(null);
useFocusEffect(
React.useCallback(() => {
const unsubscribe = API.subscribe(userId, user => setUser(user));
return () => unsubscribe();
}, [userId])
);
return <ProfileContent user={user} />;
}
错误:无效的挂钩调用。钩子只能在函数组件的主体内部调用。这可能由于以下原因之一而发生:
您可能会看到它的三个常见原因:
- 你可能有不匹配的 React 和 React DOM 版本。
- 您可能违反了 Hooks 规则。
- 您可能在同一个应用程序中拥有多个 React 副本。
据我了解,钩子只能在函数组件的主体内调用。但是,为什么文档中的上述示例不起作用?
包.json
"@react-navigation/bottom-tabs": "^6.0.9",
"@react-navigation/native": "^6.0.6",
"@react-navigation/stack": "^6.0.11",
"react": "17.0.2",
"react-native": "0.65.1",