如何将Pendo的JavaScript转换为TypeScript?

toe95027  于 2022-12-05  发布在  TypeScript
关注(0)|答案(1)|浏览(151)

Pendo的JavaScript:

import {withPendoRN} from 'rn-pendo-sdk'
import {useRef} from 'react';

function RootNavigator(props) {
  const navigationRef = useRef();
  return (
    <NavigationContainer 
      ref={navigationRef}
      onStateChange={()=> {
        const state = navigationRef.current.getRootState()
        props.onStateChange(state);
      }} 
      onReady ={()=>{
        const state = navigationRef.current.getRootState()
        props.onStateChange(state);
      }}>
      {MainStackScreen()}
    </NavigationContainer>
  )
};

export default withPendoRN(RootNavigator);

Pendo有上面提到的JavaScript代码要集成到React Native中。有人能给我一些关于如何将其转换为TypeScript的指示吗?我的代码是FC,具有export const App: FC = () => {}结构。特别是props对象?

jm81lzqq

jm81lzqq1#

1.您应该将useRef替换为useNavigationContainerRef
1.您可以为onStateChange定义一个模糊的类型定义。这是次优的,但由于Pendo还没有为此提供类型,这是我个人的偏好。
因此,重构您的代码示例:

import { NavigationContainer, useNavigationContainerRef } from '@react-navigation/native';
import { withPendoRN } from 'rn-pendo-sdk';

function RootNavigator(props: { onStateChange: (state: unknown) => unknown }) {
  const navigationRef = useNavigationContainerRef();
  return (
    <NavigationContainer
      ref={navigationRef}
      onStateChange={() => {
        const state = navigationRef.current.getRootState();
        props.onStateChange(state);
      }}
      onReady={() => {
        const state = navigationRef.current.getRootState();
        props.onStateChange(state);
      }}
    >
      {MainStackScreen()}
    </NavigationContainer>
  );
}

export default withPendoRN(RootNavigator);

相关问题