Я разбираю пример задачи Redux, чтобы попытаться понять его. Я читал, что это mapDispatchToProps
позволяет отображать действия диспетчеризации в качестве свойств, поэтому я подумал о переписывании, addTodo.js
чтобы использовать mapDispatchToProps вместо вызова диспетчеризации (addTodo ()). Я назвал это addingTodo()
. Что-то вроде этого:
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
Тем не менее, когда я запустить приложение, я получаю эту ошибку: Error: Invalid value of type object for mapStateToProps argument when connecting component AddTodo.
. Я никогда не mapStateToProps
начинал с компонента AddTodo, поэтому не был уверен, что случилось. Моя интуиция говорит , что connect()
ожидает mapStateToProps
предшествует mapDispatchToProps
.
Рабочий оригинал выглядит так:
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
Полное репо можно найти здесь .
Итак, мой вопрос: можно ли использовать mapDispatchToProps без mapStateToProps? Является ли то, что я пытаюсь делать, приемлемой практикой - если нет, то почему?
mapStateToProps
можно опустить второй аргументconnect
.null
connect
должен был принять литерал объекта в качестве параметра вместо списка аргументов.