Gibt es eine Möglichkeit, so etwas mit mobx zu tun?Vergleichen von this.props.prop und nextProps.prop mit mobx
componentWillUpdate(nextProps) {
if (this.props.prop !== nextProps.prop) {
/* side effect, ex. router transition */
}
}
Aus meiner Erfahrung ist this.props.prop
immer gleich nextProps.prop
auch in componentWill-
Haken ...
UPD Hier speziellere Anwendungsfall ist - einfaches Login-Szenario:
Shop
class AppStore {
@observable viewer = new ViewerStore();
}
class ViewerStore {
@observable id;
@observable name;
@observable error;
fromJSON(json = {}) {
this.id = json.id;
this.name = json.name;
}
clearError() {
this.error = null;
}
login({ email, password }) {
fetch('/login', {
method: 'POST',
body: JSON.stringify({
email,
password
}),
credentials: 'same-origin'
})
.then(json => {
this.fromJSON(json);
})
.catch(({ error }) => {
this.error = error;
})
}
}
Reagieren Teil
class LogInPage extends Component {
componentWillUpdate(nextProps) {
if (nextProps.viewer.id && !this.props.viewer.id) {
this.props.viewer.clearError();
this.props.onSuccess();
}
}
login = e => {
e.preventDefault();
this.props.viewer.login({
email: e.target.elements['email'].value,
password: e.target.elements['password'].value,
});
}
render() {
return (
<div>
<h1>Log In</h1>
<form onSuccess={this.login}>
<input type="text" name="email" />
<input type="password" name="password" />
<input type="submit" />
</form>
{ this.props.viewer.error && (
<div>
<b>Error</b>: {this.props.viewer.error}
</div>
)}
</div>
);
}
}
const store = new AppStore();
ReactDOM.render(<LogInPage
viewer={store.viewer}
onSuccess={() => alert("Hello!")}
/>
, container);
Also im Grunde möchte ich nur in der Lage sein, etwas zu tun, wenn Betrachter id
wechselt von undefined
etwas
Können Sie beschreiben, warum die Route geändert werden muss, und warum das die Verantwortung von der Komponente, die das gesamte Geschäft erhält, sein muss? Ich würde erwarten, dass dies in einem Geschäft passiert, das zum Beispiel einen bestimmten Artikel erhält. Vielleicht einen Code teilen? – mweststrate