Reaktion: Checker ist keine Funktion

Lesezeit: 4 Minuten

Benutzer-Avatar
Alan Suza

Ich erhalte diese seltsame Warnmeldung in der Konsole für meine React-App.

Warnung: Fehlgeschlagen propType: Checker ist keine Funktion Überprüfen Sie die Rendermethode von Chart.

Ich habe überhaupt keine Checker-Methode. Wenn ich meine entferne propTypes, die Warnung ist weg. Irgendwelche Ideen?

Meine Reaktionskomponente:

var Chart = React.createClass({
  //...
  propTypes: {
    legend: React.PropTypes.bool,
    max: React.PropTypes.number,
    min: React.PropTypes.number,
    series: React.PropTypes.arrayOf(
      React.PropTypes.shape({
        label: React.PropTypes.string,
        values: React.PropTypes.arrayOf(
          React.PropTypes.arrayOf(
            React.PropTypes.oneOfType(
              React.PropTypes.number,
              React.PropTypes.object // Date
            )
          )
        ),
        colorIndex: React.PropTypes.string
      })
    ).isRequired,
    threshold: React.PropTypes.number,
    type: React.PropTypes.oneOf(['line', 'bar', 'area']),
    units: React.PropTypes.string,
    xAxis: React.PropTypes.arrayOf(React.PropTypes.string)
  },
  render: function() {
    return (<svg>...</svg>);
  }
  //...
});

Die Payload, die ich an die Chart-Komponente sende, ist diese:

var series = [
  {label: 'first', values: [[5,2], [4,3], [3,3], [2,2], [1,1]], colorIndex: "graph-1"},
  {label: 'second', values: [[5,3], [4,2], [3,0], [2,0], [1,0]], colorIndex: "graph-2"}
];

  • Der Eindruck, den ich aus der Fehlermeldung gewonnen habe, ist, dass Sie irgendwo innerhalb der Render-Methode Ihrer Diagrammkomponente versuchen, die “Checker”-Methode für etwas aufzurufen, das keine “Checker”-Methode hat.

    – Umarmung

    1. Mai 2015 um 21:55 Uhr


  • Tut mir leid aber nein. Ich habe die Chart-Komponente überprüft und es gibt keinen Call to Checker. Ich habe den React-Quellcode überprüft und sie haben einige Checker-Funktionen. Aber ich habe keine Ahnung, wie ich das beheben kann.

    – Alan Suza

    1. Mai 2015 um 21:58 Uhr

  • Kopieren und Einfügen Ihrer propTypes in ein anderes Projekt zeigt keine Fehler, also stimme ich @hugomg zu; das ist wahrscheinlich ein Fehler im Downstream Chart Komponente (z. B. ein schlechter propType in einem Kind). Wenn der schlechte Requisitentyp nicht leicht zu identifizieren ist, würde ich wahrscheinlich mit dem Löschen beginnen propTypes eins nach dem anderen, um es aufzuspüren.

    – Michelle Tilley

    1. Mai 2015 um 22:01 Uhr


  • Können Sie Ihre Renderfunktion bereitstellen?

    – Jeremy D

    1. Mai 2015 um 22:23 Uhr

  • @AlanSouza Das meine ich React.PropTypes.oneOfType(React.PropTypes.number, React.PropTypes.object) sollte sein React.PropTypes.oneOfType([React.PropTypes.number, React.PropTypes.object])

    – Michelle Tilley

    1. Mai 2015 um 22:31 Uhr

In meinem Fall habe ich das bekommen, als ich die Shape-Funktion mit einem komplexen Objekt verwendet habe. Die Lösung war zu gehen von:

outerObject: shape({
  firstInnerObject: {
    a: string,
    b: string,
  },
  secondInnerObject: {
    a: string,
    b: number,
  },
}),

Zu:

outerObject: shape({
  firstInnerObejct: shape({
    a: string,
    b: string,
  }),
  secondInnerObject: shape({
    a: string,
    b: number,
  }),
}),

Sehr trivial, ich weiß, aber das könnte die Lösung für jemanden sein, der genauso unerfahren ist wie ich. 😉

  • Heilige Scheiße 5 Jahre später und ich muss mich fragen, wie am Arsch ich gewesen wäre, wenn du das nicht schon gelöst hättest.

    – Schmeck

    10. Februar um 21:03 Uhr

Ein Pull-Request wurde mit dem React-Repo zusammengeführt, der dem Entwickler ein besseres Feedback gibt, wenn ein solcher Fehler erneut auftritt.

Nun sieht die Validierungsmeldung wie folgt aus:

Ungültiges Argument für oneOf angegeben, eine Instanz des Arrays erwartet.

https://github.com/facebook/react/pull/3963

Dies sollte Teil von React 0.14 sein.

  • Genial! Vielen Dank, dass Sie eine PR eingereicht haben, um das Problem zu beheben

    – Michelle Tilley

    27. Mai 2015 um 15:29 Uhr

  • btw: Diese Fehlermeldung erscheint auch wenn der PropType im Array ist ungültig. ich hatte PropType.boolean Anstatt von PropType.bool und es schrieb Warning: Failed propType: checker is not a function Check the render method of auf reagieren 0.14.3

    – phil

    10. Dezember 2015 um 10:54 Uhr

  • interessant … vielleicht könnte ein weiterer Pull Request erstellt werden!

    – Alan Suza

    10. Dezember 2015 um 13:13 Uhr

  • In meinem Fall war Fehler PropTypes.function statt PropTypes.func

    – Eugen Gluhotorenko

    27. Oktober 2016 um 12:22 Uhr

  • Ich habe dies auch gesehen, wenn Sie verschachtelte Objekte in verwenden PropTypes.shape und vergessen Sie, die inneren Objekte einzupacken PropTypes.shape.

    – jeffwtribble

    29. August 2017 um 22:44 Uhr

Veränderung

React.PropTypes.oneOfType(React.PropTypes.number, React.PropTypes.object)

zu

React.PropTypes.oneOfType([React.PropTypes.number, React.PropTypes.object])

(das Argument sollte ein Array sein)

In meinem Fall habe ich Requisiten falsch validiert. Ich habe vergessen, das Profilobjekt einzubinden PropTypes Shape-Methode.

Mistake

Component.propTypes = {
  viewProfile: PropTypes.shape({
    profile: {     // it is a normal object without a PropTypes shape method
      firstName: PropTypes.string,
      lastName: PropTypes.string,
      profileImage: PropTypes.string,
    },
  }).isRequired,
};

Solution

Component.propTypes = {
  viewProfile: PropTypes.shape({
    profile: PropTypes.shape({
      firstName: PropTypes.string,
      lastName: PropTypes.string,
      profileImage: PropTypes.string,
    }),
  }).isRequired,
};

FWIW, ich bekam Failed PropType: typeChecker is not a function. Das habe ich bei mir gemerkt PropTypes.arrayOf() Eigenschaften, ich habe ein Objekt von PropTypes übergeben, z PropTypes.arrayOf({})anstatt vorbeizukommen PropTypes.shape() z.B PropTypes.arrayOf(PropTypes.shape({})

Durch diese Änderung wurde die Fehlermeldung beseitigt.

Benutzer-Avatar
Shaun K.

Meine Version von Warning: Failed propType: checker is not a function kam vom Vergessen, PropTypes.shape für ein Objekt zu verwenden.

Ändern:

someProps: {
    prop: React.PropTypes.string,
    anotherProp: React.PropTypes.number,
}

dazu das Problem behoben:

someProps: React.PropTypes.shape({
    prop: React.PropTypes.string,
    anotherProp: React.PropTypes.number,
})

Benutzer-Avatar
zustimmen

Die eigentliche Erklärung für dieses Problem ist, dass React einen PropType erwartet, der technisch gesehen eine Funktion ist, auch bekannt als Prüfer. Beispiele für Checker-Funktionen sind:

PropTypes.array
PropTypes.shape({...})
PropTypes.bool

Sie haben die Idee … Was hier also passiert, ist, wenn Sie etwas passieren, das kein Dame ist, zum Beispiel ein undefinedreagieren wird nicht wissen, was sie damit anfangen sollen und sich beschweren:

Checker ist keine Funktion

In meinem Fall war die Ursache ein Rechtschreibfehler bei den Checker-Funktionen:

PropTypes.shape({
    cats: PropTypes.Array // this is undefined
})

Die richtige Version sollte sein:

PropTypes.shape({
    cats: PropTypes.array // lowercase is correct!
})

1144360cookie-checkReaktion: Checker ist keine Funktion

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

Privacy policy