【问题标题】:react-navigation navigation hook typereact-navigation 导航钩子类型
【发布时间】:2020-10-02 11:06:23
【问题描述】:

我正在使用 react-navigation 中的这个钩子,而不是在不同的组件中再次调用该钩子,我想将 navigation 作为道具传递。

const navigation = useNavigation();
...
  <MyButton
     resetLocation={resetLocation}
     navigation={navigation}
  /> 

但我无法确定应该传递给 MyButton 组件的导航道具的“类型”。

type MyButtonProps = {
  resetLocation: (locationToReset: string) => void;
  navigation: any;
};

export const MyButton: React.FunctionComponent<MyButtonProps> = ({
  resetLocation,
  navigation,

我应该用什么替换navigation: any;

【问题讨论】:

  • 不是 NavigationScreenProp 类型
  • @SaachiTech 我可以从“@react-navigation/native”导入 NavigationState,但不能从其他两个导入。我怎么能得到这些?
  • 对不起,它的 NavigationProp 这里是链接github.com/react-navigation/react-navigation/blob/main/packages/…
  • 是的,行得通。你想写一个答案吗? @SaachiTech

标签: javascript reactjs typescript react-native react-navigation


【解决方案1】:

使用NavigationProp&lt;ParamListBase&gt;

这里是useNavigation的定义,我贴在这里以防万一。

import * as React from 'react';
import type { ParamListBase } from '@react-navigation/routers';
import NavigationContext from './NavigationContext';
import type { NavigationProp } from './types';

/**
 * Hook to access the navigation prop of the parent screen anywhere.
 *
 * @returns Navigation prop of the parent screen.
 */
export default function useNavigation<
  T extends NavigationProp<ParamListBase>
>(): T {
  const navigation = React.useContext(NavigationContext);

  if (navigation === undefined) {
    throw new Error(
      "Couldn't find a navigation object. Is your component inside a screen in a navigator?"
    );
  }

  return navigation as T;
}

这里是更多信息的链接https://github.com/react-navigation/react-navigation/blob/main/packages/core/src/useNavigation.tsx

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-18
    • 2018-12-01
    • 2018-04-08
    • 1970-01-01
    • 1970-01-01
    • 2022-06-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多