30
votes

'Stack.navigator' ne peut pas être utilisé comme composant JSX

Il y a un problème de type à l'aide de React Navigation, lors de l'utilisation de stack.navigation ou stack.group depuis CreenatiVestackNavigator

Le problème dit Le fait que les types ne correspondent pas à jsx.element à la fin des messages est plus spécifique: Type '{}' n'est pas attribuable pour taper 'reactNode'

Message entier:

"dependencies": {
  "@types/react": "^17.0.41"
}

La façon de reproduire est simplement d'installer ces versions et d'exécuter le projet.

"react": "17.0.1",
"react-dom": "17.0.1",
"react-native": "0.64.3",
"@react-navigation/bottom-tabs": "^6.3.1",
"@react-navigation/native": "^6.0.10",
"@react-navigation/native-stack": "^6.6.1",
"typescript": "^4.6.3"

Mon application fonctionne toujours et je n'ai aucune erreur dans la console. Je ne sais pas pourquoi j'ai une ligne rouge sous Stack.Navigator. Mais quand je plane dessus, il dit que 'stack.navigator' ne peut pas être utilisé comme composant JSX.

 Entrez la description de l'image ici

i aussi J'ai la même erreur lors de l'utilisation de MaterialScommunityIcons

Mise à jour au 12-04-22 pour React Navigation

Ceci est un problème lié à la version @ Types / React Vous devez ajouter cette résolution minimale à votre projet pour le résoudre:

'Stack.Navigator' cannot be used as a JSX component.
  Its element type 'ReactElement<any, any> | Component<Omit<DefaultRouterOptions<string> & { id?: string | undefined; children: ReactNode; screenListeners?: Partial<...> | ... 1 more ... | undefined; screenOptions?: NativeStackNavigationOptions | ... 1 more ... | undefined; defaultScreenOptions?: NativeStackNavigationOptions | ... 1 mo...' is not a valid JSX element.
    Type 'Component<Omit<DefaultRouterOptions<string> & { id?: string | undefined; children: ReactNode; screenListeners?: Partial<{ transitionStart: EventListenerCallback<NativeStackNavigationEventMap, "transitionStart">; ... 4 more ...; beforeRemove: EventListenerCallback<...>; }> | ((props: { ...; }) => Partial<...>) | unde...' is not assignable to type 'Element | ElementClass | null'.
      Type 'Component<Omit<DefaultRouterOptions<string> & { id?: string | undefined; children: ReactNode; screenListeners?: Partial<{ transitionStart: EventListenerCallback<NativeStackNavigationEventMap, "transitionStart">; ... 4 more ...; beforeRemove: EventListenerCallback<...>; }> | ((props: { ...; }) => Partial<...>) | unde...' is not assignable to type 'ElementClass'.
        The types returned by 'render()' are incompatible between these types.
          Type 'React.ReactNode' is not assignable to type 'import("/Users/mrcmesen/Novum/ice-app/plant-maintenance/node_modules/@types/react-native/node_modules/@types/react/index").ReactNode'.
            Type '{}' is not assignable to type 'ReactNode'.ts(2786)


3 commentaires

NPM Install après cela ou?


Remarque légère: @ Types / React 17.0.41 n'a pas fonctionné pour moi, mais 18.0.8 a corrigé cela pour moi.


Pour moi 18.0.1 a fonctionné


4 Réponses :


29
votes

Vous devrez corriger la version pour @ Types / React car de nombreuses bibliothèques React ont une dépendance de dépendance sous forme @ types / react: "*", qui prendra La dernière version du package. (Je suppose qu'ils viennent de publier la version 18)

Pour ce faire, vous pouvez l'ajouter dans votre package.json

si vous utilisez le yarn

"preinstall": "npm install --package-lock-only --ignore-scripts && npx npm-force-resolutions"


5 commentaires

Les commentaires ne sont pas pour une discussion prolongée; Cette conversation a été Déménagé pour discuter .


La mise à niveau vers la dernière version a fonctionné pour moi.


Il résout le problème des composants Navigator mais entre en conflit avec le script de type lorsque la commande de démarrage NPM est tirée.


La réponse "Résolution" a résolu le problème.


Oui, mais avec la «résolution» du NPM ne fonctionne pas



3
votes

je le corrige en mettant à jour @ types / réagir jusqu'à sa version 18.

En fait, j'utilise "@ types / react": "^ 18.0.9".

pour mettre à jour juste faire:

npm install -D @types/react


0 commentaires

9
votes

C'est une simple erreur de frappe qui peut être résolue en mettant à jour le typage React.

npm install -d @ types / react

ou

yarn add -d @ types / react


0 commentaires

2
votes
  • Exécutez le fil pourquoi @ types / réagir pour le fil et le npm ls @ types / réagir pour vérifier S'il y a plusieurs versions installées et pourquoi elles sont installé
  • Ajouter "Resolutions": {"@ Types / React": "~ 17.0.21"} ou une autre version Compatible avec React-Native dans Package.json
  • Exécutez 'Yarn Install' ou NPM I

  • 0 commentaires