Die JSX-Elementklasse unterstützt keine Attribute, da sie keine „props“-Eigenschaft hat.ts(2607)

Lesezeit: 4 Minuten

Ich erhalte diese Fehlermeldung, wenn ich „Cropper“ aus der React-Easy-Crop-Bibliothek verwende. Ich habe ein paar Dinge ausprobiert, die ich in Foren gefunden habe, wie das Hinzufügen von @types/react und das Importieren von * als React aus „react“, aber es scheint nichts zu sein arbeiten.

Hier ist der Code, der mir Probleme bereitet:

import * as React from "react";
import Cropper from "react-easy-crop";

export default function CropperPage({action , valuePro}: any) {
   return (
     <Cropper //  <-- This is giving me the error
        cropShape= "round"
        disableAutomaticStylesInjection="true"
        image={image}
        crop={crop}
        zoom={zoom}
        aspect={1}
        onCropChange={setCrop}
        onZoomChange={setZoom}
        onCropComplete={onCropComplete}
    />
   );
}

Die ganze Fehlermeldung lautet:

Die Blockquote-JSX-Elementklasse unterstützt keine Attribute, da sie keine „props“-Eigenschaft hat.ts(2607) „Cropper“ kann nicht als JSX-Komponente verwendet werden. Sein Instanztyp „Cropper“ ist kein gültiges JSX-Element. Dem Typ „Cropper“ fehlen die folgenden Eigenschaften vom Typ „ElementClass“: context, setState, forceUpdate, props, refsts(2786) (alias) class Cropper import Cropper

Benutzeravatar von Benjamin Merchin
Benjamin Merchin

Ich hatte den gleichen Fehler mit <Text></Text> und das lag daran, dass ich die Komponente nicht importiert hatte.

  • Wow. Ja. Autoimport hat mich hintergangen, als ich ein gleichnamiges Ding aus einem anderen Paket importierte.

    – Froxx

    25. Januar um 15:24

Ich bin kürzlich tatsächlich darauf gestoßen und konnte, nachdem ich hier keine Antwort gefunden habe, Typoskripte verwenden traceResolution Zu entdeckende Funktion: Typoskript wurde aufgelöst import "react" Zu node_modules/react/index.js anstatt node_modules/@types/react/index.d.ts. Einige Änderungen an meiner tsconfig.json konnten dieses Problem beheben – das hatte ich node_modules/* in einem meiner paths Streichhölzer, und musste hinzufügen node_modules/@types/* um es auch zum Suchen zu bringen @types/ Pakete.

Daher würde ich empfehlen, „traceResolution“ (entweder als tsc-Flag oder als tsconfig.json-Feld) zu verwenden und zu prüfen, ob „react“ falsch aufgelöst wird. Wenn dies der Fall ist, konzentrieren Sie sich darauf, das Problem zu beheben. Es könnte das gleiche Problem sein, bei dem „node_modules/react“ anstelle von „node_modules/@types/react“ gefunden wird, obwohl die Ausgabe von „traceResolution“ ein klares letztes Wort dazu haben wird.

  • Wie sollte ich meine tsconfig.json ändern, um zu erzwingen, dass Typescript zuerst im @types-Verzeichnis nachschaut?

    – dannymo

    29. November 2022 um 14:54 Uhr

  • etwas wie "paths": {"*": ["node_modules/@types/*", "node_modules/*"], ...}. Sie können die Auflösung von auch gezielt überschreiben react wie „paths“: {“react“: [“node_modules/@types/react”]} – aber wenn bei React dieses Problem auftritt, haben Sie wahrscheinlich eine Fehlkonfiguration vorgenommen, so dass jede Bibliothek, die von Typen aus einem @types/-Paket abhängt, ebenfalls dieses Problem haben wird, und ich denke, es ist besser, den allgemeinen Fall zu lösen.

    – David Goldstein

    4. Dezember 2022 um 6:11

Ich hatte das gleiche Problem, bei dem dieser Fehler heute bei demselben Projekt auftrat, das neulich einwandfrei lief. Nach vielen Versuchen und Irrtümern habe ich schließlich meinen Ordner „node_modules“ gelöscht und ihn mit einem neu erstellt npm install. Dann hat es wieder funktioniert.

Heute ist bei der Verwendung von antd das gleiche Problem aufgetreten Option Komponente, mein Code sieht so aus:

const renderPhotoTypeImpl = () => {
    const photoList: JSX.Element[] = [];
    if (photoType && photoType.length > 0) {
    photoType.forEach(item => {
        photoList.push(
        <Option value={item} label={item}>
            <Space>
                <span role="img" aria-label="China">
                </span>
                Dog
            </Space>
        </Option>);
    });
    }
    return (<div></div>);
}

füge einfach das hinzu Option Wenn Sie Folgendes definieren, wird dieses Problem behoben:

const { Option } = Select;

Benutzeravatar von ThibaudGr
ThibaudGr

import Cropper from "react-easy-crop";

interface CropperFix extends React.Component {}

const Cropped = (Cropper as any) as {
    new(): CropperFix;
};

const props: any = {
    cropShape: "round",
    disableAutomaticStylesInjection: true,
    image,
    crop,
    zoom,
    aspect: 1,
    onCropChange: setCrop,
    onZoomChange: setZoom,
    onCropComplete: onCropComplete,
}

...

<Cropped ...props/>

Wahrscheinlich hässlich, aber funktioniert

  • Gibt es Klarstellungen? Was macht es und wie kann man ein ähnliches Problem beheben?

    – VityaSchel

    27. November 2021 um 13:36 Uhr

  • Bitte fügen Sie eine kurze Erklärung hinzu, warum dies funktioniert

    – Lenzmann

    12. März 2022 um 8:48

  • Diese Lösung umgeht eigentlich nur das Typsystem, anstatt irgendetwas richtig zu machen – die Umwandlungen in any sind es, die es besonders hässlich machen und jegliche Sicherheit zerstören.

    – David Goldstein

    20. Okt. 2022 um 19:06 Uhr


  • Gibt es Klarstellungen? Was macht es und wie kann man ein ähnliches Problem beheben?

    – VityaSchel

    27. November 2021 um 13:36 Uhr

  • Bitte fügen Sie eine kurze Erklärung hinzu, warum dies funktioniert

    – Lenzmann

    12. März 2022 um 8:48

  • Diese Lösung umgeht eigentlich nur das Typsystem, anstatt irgendetwas richtig zu machen – die Umwandlungen in any sind es, die es besonders hässlich machen und jegliche Sicherheit zerstören.

    – David Goldstein

    20. Okt. 2022 um 19:06 Uhr


1453180cookie-checkDie JSX-Elementklasse unterstützt keine Attribute, da sie keine „props“-Eigenschaft hat.ts(2607)

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy