Je suis briser Redux " todo exemple pour essayer de comprendre. J'ai lu qu' mapDispatchToProps
permet à la carte de répartition des actions comme les accessoires, donc j'ai pensé à la réécriture addTodo.js
d'utilisation mapDispatchToProps au lieu d'appeler l'expédition(addTodo()). Je l'ai appelé" addingTodo()
. Quelque chose comme ceci:
import React from 'react';
import {connect} from 'react-redux';
import addTodo from '../actions';
let AddTodo = ({addingTodo}) => {
let input;
return (
<div>
<form onSubmit={e => {
e.preventDefault()
if (!input.value.trim()) {
return
}
addingTodo(input.value)
input.value = ""
}}>
<input ref={node => {
input = node
}} />
<button type="submit">Submit</button>
</form>
</div>
)
}
const mapDispatchToProps = {
addingTodo: addTodo
}
AddTodo = connect(
mapDispatchToProps
)(AddTodo)
export default AddTodo
Cependant, lorsque je lance l'application, j'obtiens cette erreur: Error: Invalid value of type object for mapStateToProps argument when connecting component AddTodo.
. Je n'ai jamais utilisé mapStateToProps
pour commencer AddTodo composant, donc je n'étais pas sûr de ce qui n'allait pas. Mon instinct dit que connect()
prévoit mapStateToProps
précéder mapDispatchToProps
.
Le travail original ressemble à ceci:
import React from 'react';
import {connect} from 'react-redux';
import addTodo from '../actions';
let AddTodo = ({dispatch}) => {
let input;
return (
<div>
<form onSubmit={e => {
e.preventDefault()
if (!input.value.trim()) {
return
}
dispatch(addTodo(input.value))
input.value = ""
}}>
<input ref={node => {
input = node
}} />
<button type="submit">Submit</button>
</form>
</div>
)
}
AddTodo = connect()(AddTodo)
export default AddTodo
Complet repo peut être trouvé ici.
Donc ma question est, est-il possible de faire mapDispatchToProps sans mapStateToProps? Est ce que je suis en train de faire une pratique acceptable - si non, pourquoi pas?