Ja, das ist das gewünschte Verhalten.
Der Grund, warum der Wert nicht aktualisiert wurde, liegt darin, dass Ihre Komponente noch nicht neu gerendert wurde. Wenn Sie eine solche Funktion benötigen, sollten Sie den Rückruf componentDidUpdate
verwenden.
Siehe die Lebenszyklusmethoden here.
ERKLÄRUNG:
Hier ist, wie funktioniert Reagieren:
Jede Komponente ist eine Funktion der external props
+ internal state
Wenn eine Änderung in einem der beiden ausgelöst wird, Die Komponente wird in die Warteschlange gestellt, um erneut gerendert zu werden (sie ist asynchron, sodass die Clientanwendung nicht blockiert wird).
Siehe den obigen Link für die genaue Reihenfolge der Operationen, aber hier ist ein kleiner Beweis des Konzepts.
import React from 'react';
class Example extends React.Component {
constructor(props, context) {
super(props, context);
// initial state
this.state = {
clicked: false
};
}
componentDidUpdate(prevProps, prevState) {
console.log(this.state.clicked); // this will show "true"
}
render() {
return (
<button
onClick={() => {
this.setState({clicked: true});
}}
>
</button>
);
}
}
'setState' ist ein asynchroner Betrieb.Du musst das wahrscheinlich nicht tun, oder? – azium
Ja, es ist.aber funktioniert nicht sofort, dafür brauchen Sie reagieren Linkstate Mixin. aber immer noch nicht funktioniert –
Sicher .. ich meine in dem Code, den Sie gepostet haben, könnten Sie nur überprüfen, ob 'shares' ist wahr zu wissen, ob es eine leere Zeichenfolge ist oder nicht, also vielleicht haben Sie nicht den tatsächlichen Code Sie hatten ein Problem mit. – azium