【问题标题】:Is there a proper way to use useNavigation() hook with useEffect() dependencies?是否有正确的方法使用 useNavigation() 钩子和 useEffect() 依赖项?
【发布时间】:2019-10-08 03:50:40
【问题描述】:

我正在尝试使用 useNavigation() 挂钩与 react-navigation 交互,以响应我在 useEffect() 中注册的回调。 linter 警告我 useEffect() 缺少依赖项。如果我将导航钩子添加为依赖项,效果会持续运行。我试图避免这种情况,并想知道除了忽略 linter 错误之外是否还有正确的方法。

不提供依赖数组会导致效果持续触发的相同行为。

这可能是 react-navigation-hooks 包中的 useNavigation() 挂钩如何工作的潜在问题。

function MyComponent() {
    const navigation = useNavigation();

    useEffect(() => {
        navigation.navigate('Home');
    }, []);
}

结果:

React Hook useEffect has a missing dependency: 'navigation'. Either include it or remove the dependency array.

【问题讨论】:

    标签: react-native react-navigation react-hooks


    【解决方案1】:

    只是一个自以为是的猜测:更多的是关于你的“架构”的问题。

    例如:自定义useNavigation 钩子返回一个可由钩子的使用者调用的函数 而不是一个具有所有功能的对象不是更有意义吗?

    这是一个例子:

    const useNavigation = () => {
      const [routes, setRoutes] = useState(null)
      ...
    
      const navigate = (destination: string) => {
        console.log("navigated to ", destination)
      }
    
      return { navigate, routes }
    }
    
    function App() {
      const { navigate } = useNavigation();
    
      return (
        <div className="App">
          <h1>Parent</h1>
          <button onClick={() => navigate("Home")}>Navigate me!</button>
        </div>
      );
    }
    

    工作代码沙盒:https://codesandbox.io/s/usenavigation-95kql


    如果你仍然想保留这个“架构”,你可以像这样使用useRef 钩子:

    const navigation = useRef(useNavigation());
    
    useEffect(() => {
        navigation.current.navigate("Home");
    }, []);
    

    【讨论】:

    • 谢谢,这非常有帮助,不敢相信我没有早点看到。关于 useNavigation 挂钩,这是来自 react-navigation-hooks 包。
    猜你喜欢
    • 2020-05-25
    • 2020-01-23
    • 1970-01-01
    • 2020-09-15
    • 1970-01-01
    • 2023-02-03
    • 2022-01-03
    • 2021-05-14
    • 1970-01-01
    相关资源
    最近更新 更多