Möchten Sie eine Funktion anfordern oder einen Fehler melden?
Fehler
Wie ist das aktuelle Verhalten?
In der Konsole wird eine Warnung für eine Komponente angezeigt, bei der alle folgenden Bedingungen erfüllt sind:
React.memo
gespeichertText dieser Warnung: Warning: ComponentName: Rendered more hooks than during the previous render. This is not currently supported and may lead to unexpected behavior.
Wenn das aktuelle Verhalten ein Fehler ist, geben Sie bitte die Schritte zur Reproduktion und wenn möglich eine minimale Demo des Problems an. Fügen Sie den Link zu Ihrem JSFiddle- (https://jsfiddle.net/Luktwrdm/) oder CodeSandbox- (https://codesandbox.io/s/new) Beispiel unten ein:
https://codesandbox.io/s/71lr16j491
Was ist das erwartete Verhalten?
Es sollte keine Warnung angezeigt werden, da die Regeln für Hooks eingehalten werden. Außerdem sollte das Verhalten konsistent sein, unabhängig davon, ob React.memo
verwendet wird oder nicht.
Welche Versionen von React und welcher Browser / welches Betriebssystem sind von diesem Problem betroffen?
Reaktion 16.8.1
Meine erste Lektüre ist, dass dies ein Fehler ist.
Ich habe das gleiche Problem in Version 16.8.1
bemerkt. In meinem Fall gibt es jedoch keine gespeicherte Komponente zwischen der Stelle, an der ein Promise
geworfen wird, und der Suspense
-Komponente.
Die Komponente deklariert zwei Hooks oben, bevor Promise
ausgelöst wird und die Warnung angezeigt wird. Ich habe den Anruf verschoben und die Promise
nach oben geworfen, bevor die Haken und das gleiche passiert. Die Warnung verschwindet, wenn in der Komponente kein Promise
ausgelöst wird.
Ein Mock meiner Komponente ist so etwas wie:
function Component(props) {
const [state, setState] = useState()
useEffect(...)
// Promise is thrown somewhere after these two
// hooks on top, but before the return statement.
return (
...
)
}
Kann dies bestätigen.
Behoben in 16.8.2.
https://codesandbox.io/s/vmmkmvo6pl
Hilfreichster Kommentar
Behoben in 16.8.2.
https://codesandbox.io/s/vmmkmvo6pl