React.js :Vous avez appelé `setState` avec un rappel qui n'est pas appelable
C'est mon morceau de code qui fonctionne correctement (ajoute des enregistrements), mais renvoie une erreur après l'addition:
Erreur non interceptée: l'Invariant de la Violation: enqueueCallback(...): Vous avez appelé
setProps
,replaceProps
,setState
,replaceState
, ou
forceUpdate
avec un rappel qui n'est pas appelable.
handleSubmit: function(e) {
e.preventDefault();
return $.post('', {page: this.state},
function(data) {
this.props.handleNewPage(data);
return this.setState(this.getInitialState(), 'JSON');
}.bind(this)
);
}
Il n'y a pas de routes pour l'instant. Quelqu'un peut-il m'aider à résoudre ce problème?
essayé cela?
fonctionne de la même façon.
return this.setState(this.getInitialState, 'JSON');
fonctionne de la même façon.
OriginalL'auteur Fleeck | 2015-07-14
Vous devez vous connecter pour publier un commentaire.
La deuxième (en option) paramètre
setState
est une fonction de rappel, pas une chaîne de caractères. Vous pouvez passer une fonction qui sera exécutée une fois que l'opération est terminée.setState accepte réellement un rappel que le premier argument ainsi: facebook.github.io/react/docs/component-api.html
Le premier paramètre peut être soit un fonction (pas de rappel, il y a une différence), ou un objet. Soit, beau travail. Un rappel est strictement une fonction appelé lorsqu'une opération est terminée. Ce n'est pas le cas avec setState du premier argument.
Oui, vous avez raison, je suis coupable de l'utilisation de la terminologie mal. Mais encore, setState accepte une fonction comme premier argument. Ce qui n'est pas contredite par tout ce que vous dites dans votre réponse, c'est juste une note. Le deuxième argument doit en effet être un rappel et non une chaîne.
Encore une fois, c'est exact, mais le problème était dans le deuxième paramètre, pas le premier. Changer
this.getInitialState()
àthis.getInitialState
n'aurait pas résolu, parce que. ce n'était pas le problème, et b. la signature est fausse.OriginalL'auteur Madara Uchiha
Vous invoquer
getInitialState
au lieu de fournir une référence à la fonction elle-même sur la lignereturn this.setState(this.getInitialState(), 'JSON');
et le deuxième argument ne devrait jamais être quelque chose, mais d'une fonction de rappel.this.setState
s'attend à une fonction doit retourner un objet d'état que d'un seul argument, ou un objet de fusionner l'état actuel (plus éventuellement un rappel comme deuxième argument de courir après l'état a été définie). Donc, soit vous fournir juste une fonction qui renvoie le nouvel état, ou de vous fournir un objet que l'état actuel devrait être fusionné avec comme premier argument et un rappel qui sera exécuté après que l'état a été défini comme deuxième argument.Soit
this.setState(this.getInitialState)
outhis.setState(this.getInitialState())
outhis.setState(newState, callback)
.Vérifier la signature sur l'API ici.
OriginalL'auteur Hannes Johansson