我可以在Redux中没有mapStateToProps mapDispatchToProps吗?

Igg*_*ggy 70 javascript reactjs redux react-redux

我正在分解Redux的todo示例以试图理解它.我读过,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
Run Code Online (Sandbox Code Playgroud)

但是,当我运行应用程序时,我收到此错误: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
Run Code Online (Sandbox Code Playgroud)

完整的回购可以在这里找到.

所以我的问题是,是否有可能在没有mapStateToProps的情况下执行mapDispatchToProps?我正在努力做一个可以接受的做法 - 如果不是,为什么不呢?

iof*_*sli 115

是的你可以.只是null作为第一个参数传递:

AddTodo = connect(
    null,
    mapDispatchToProps
)(AddTodo)
Run Code Online (Sandbox Code Playgroud)

是的,这不仅仅是可接受的练习,它是推荐的触发动作的方法.使用mapDispatchToProps允许隐藏在反应组件中使用redux的事实

  • 当只使用`mapStateToProps`时,可以省略`connect`的第二个参数.没有必要传递`null` (15认同)
  • 但是我可以使用mapStateToProps而不使用mapDispatchToProps吗? (5认同)
  • @VelizarAndreevKitanov是的 (5认同)
  • `connect` 应该接受一个对象文字作为参数而不是参数列表。 (2认同)