J'ai cherché des réponses à celui-ci mais je n'ai vu aucun correspondant à mon problème. Je suis en train de construire une application calculatrice en utilisant React & Redux et chaque fois que je clique sur l'un des boutons numériques, j'obtiens une erreur qui dit "this.props.AppendCharacter n'est pas une fonction"React-Redux: this.props.AppendCharacter n'est pas une fonction
Voici mon code pertinent:
number_button.js
import React, {Component} from 'react';
import {bindActionCreators} from 'redux';
import {connect} from 'react-redux';
import AnswerScreen from '../containers/answer_screen';
import AppendCharacter from '../actions/index';
class NumberButton extends Component {
constructor(props) {
super(props);
this.state = { button: '' };
this.clickButton = this.clickButton.bind(this);
};
clickButton() {
this.props.AppendCharacter(this.props.number);
console.log('clicked on ', this.props.number);
this.setState({ button: this.props.number });
}
render(props) {
return (
<div className="number-button general-button" onClick={this.clickButton}>
{this.props.number}
</div>
);
};
};
function mapDispatchToProps(dispatch) {
return bindActionCreators({ AppendCharacter }, dispatch);
};
export default connect(null, mapDispatchToProps)(NumberButton);
actions/index.js
export function AppendCharacter(character) {
return {
type: APPEND,
payload: character
};
};
Merci. J'ai essayé, mais j'ai eu une erreur différente qui a dit "Uncaught TypeError: (0, _index2.default) n'est pas une fonction" (Oh, et je vais probablement enlever l'état de composant une fois que j'ai obtenu ce travail - J'ai changé de design après avoir ajouté cette partie, merci pour le commentaire.) – PirateJohn
Vous êtes proche. Des sons comme celui-ci ont résolu votre problème. Maintenant, vous devez revoir comment vous «importez» et «exportez». On dirait que vous avez (ou n'avez pas) une exportation 'default' quand vous vouliez (ou ne vouliez pas). [ceci devrait aider] (https://stackoverflow.com/a/36796281/2479481) –
L'original 'mapDispatchToProps' était correct; 'bindActionCreators' encapsule les créateurs d'actions dans les appels à' dispatch() '. Je suggérerais, cependant, que si vous ne comprenez pas profondément comment '' dispatch() 'fonctionne, vous ne devriez pas utiliser' bindActionCreators' car il ajoute une couche potentiellement confuse sur un concept que beaucoup trouvent déjà confus quand ils commencent à utiliser le redux . – stone