J'utilise reac-native avec react-redux et redux-thunk. Fondamentalement, j'ai un Component
connecté à store
qui modifie certaines informations à partir de . Bien que chaque opération semble être synchrone, je reçois des données anciennes sur la ligne suivante après modification.Comment puis-je attendre que l'affectation du magasin réducteur soit terminée?
//reducer
import {assign as _assign} from 'lodash-es';
let initialState = {name: '1'};
export default (state = initialState, action) => {
switch (action.type) {
case 'Project renamed':
return _assign({}, state, {name: action.data});
default:
return state;
}
};
//Component
import React, {Component} from 'react';
import {connect} from 'react-redux';
import Prompt from 'react-native-prompt';
class HomeScreen extends Component {
render() {
return <Prompt
onSubmit={() => {
this.props.onProjectRenamed('2');
console.log(this.props.currentProject.name) //Still get '1' here!!!
}}
/>;
}
}
const mapStateToProps = state => ({
currentProject: state.currentProject
});
const mapDispatchToProps = dispatch => ({
onProjectRenamed: (data) => dispatch({
type: 'Project renamed',
data: data
})
});
export default connect(mapStateToProps, mapDispatchToProps)(HomeScreen);
Comment puis-je obtenir la nouvelle valeur this.props.currentProject.name
?
Oh, bien sûr que je l'ai. Juste une faute de frappe dans mon message. – JustLogin
@ JustLogin voir mise à jour – FuzzyTree
cela fonctionne, mais comment? Tout dans votre 'onProjectRenamed' semble rester synchrone (' dispatch' d'abord, renvoyant 'resolve' alors). Pourquoi 'renvoie-t-on les déclencheurs Promise.resolve()' uniquement après que 'store' a été modifié? – JustLogin