Pourquoi mes accessoires `undefined` lors de l'utilisation de redux et react.js?
J'ai essayé d'ajouter un état à mon application que vous venez d'enregistrer un booléen quand un événement est passé. Je ne peux pas comprendre ce que je fais mal ici.
Réducteur:
import * as actionTypes from '../constants/action-types.js';
const initialState = [{
eventPassed: false
}];
export default function eventPassed(state = initialState, action) {
switch (action.type) {
case actionTypes.EVENT_PASSED:
return true;
default:
return state;
}
}
Action:
import * as actionTypes from '../constants/action-types';
export function eventPassed(eventPassed) {
return {
type: actionTypes.EVENT_PASSED,
payload: { eventPassed: eventPassed }
};
}
Conteneur autour de composant:
import React, { Component } from 'react';
import { connect } from 'react-redux';
import { bindActionCreators } from 'redux';
import Example from '../components/example.jsx';
import { eventPassed } from '../actions/app-actions';
class ExampleContainer extends Component {
render() {
return (
<Example {...this.props} />
);
}
}
const mapDispatchToProps = (dispatch) => ({
actions: bindActionCreators({
eventPassed
}, dispatch)
});
const mapStateToProps = (state) => ({
eventPassed: state.eventPassed
});
export default connect(mapStateToProps, mapDispatchToProps)(ExampleContainer);
Composant:
import React, { Component, PropTypes } from 'react';
class Example extends Component {
constructor() {
super();
this.action = this.action.bind(this);
}
componentDidMount() {
this.props.actions.eventPassed(true);
}
action() {
console.log(this.props.eventPassed);
}
render() {
return (
<div>
<button onClick={this.action}>Action</button>
</div>
);
}
}
export default Example;
Quand j'essaie de me connecter ".accessoires de jeu.eventPassed" dans le <Example />
composant qu'il me donne "undefined". Est-il quelque chose qui manque? Ce qui semble être la plus simple l'utilisation de la boutique en redux.
Votre réducteur doit retourner à l'état d'objet, dans votre cas, {eventPassed: true}
Il n'est pas présent.accessoires de jeu.eventPassed sur le
Édité ma réponse pour être plus lisible
Il n'est pas présent.accessoires de jeu.eventPassed sur le
<Example />
composant. Voir ma réponse ci-dessousÉdité ma réponse pour être plus lisible
OriginalL'auteur Jim Peeters | 2016-11-16
Vous devez vous connecter pour publier un commentaire.
D'autres modifications nécessaires:
mapDispatchToProps
doit renvoyer une valeurUn la flèche de la fonction avec un bloc de corps ne retourne pas automatiquement une valeur et, par conséquent, on doit être défini. Donc, votre fonction doit ressembler à:
État Initial est un tableau contenant un objet:
Puisque vous essayez de référence plus tard comme un
object { eventPassed: true}
et non pas un tableau d'objets[ { eventPassed: true } ]
il devrait être:Le réducteur doit passer de nouveau la mise à jour correcte (mais mutées) état:
Ce que vous étiez d'abord à faire était de retour d'un état qui n'était plus un objet (ou, dans le cas original d'un tableau d'objet), mais seulement la valeur de
true
Content que vous avez trouvé utile!
plus un pour la flèche de fonctions, permet d'économiser beaucoup de temps
OriginalL'auteur Pineda
Dans votre
reducer
vous initialisez votre état avec l'ensemble de l'objet aeventPassed
de la propriété, en attendant de vous renvoyer simplement le booléen et ce n'est pas juste, parce que c'remplacer l'état initial, de sorte que le initState pourrait être juste un objet de la tenue de la boolean, et vous devez retourner à l'état basé sur lapayload
envoyé avec l'action dispathed être comme suit:Aussi, dans votre
component
vous pouvez avoir besoin de changer:this.props.eventPassed
àthis.props.actions.eventPassed
OriginalL'auteur Basim Hennawi