Могу ли я MapDispatchToProps без mapStateToProps в Redux?

Я нарушаю пример Redux, чтобы попытаться понять его. Я читал, что mapDispatchToProps позволяет вам отображать действия отправки в качестве реквизита, поэтому я подумал о переписывании addTodo.js для использования mapDispatchToProps вместо вызова dispatch (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? Я пытаюсь сделать приемлемую практику - если нет, почему бы и нет?

Ответы

Ответ 1

Да, ты можешь. Просто передайте null как первый аргумент:

AddTodo = connect(
    null,
    mapDispatchToProps
)(AddTodo)

Да, это не только приемлемая практика, она рекомендовала способ инициировать действия. Использование mapDispatchToProps позволяет скрыть факт использования сокращений внутри ваших реагирующих компонентов