ReduxでmapStateToPropsなしでmapDispatchToPropsを使用できますか?


92

私はそれを理解しようとするためにReduxのtodoの例を分解しています。mapDispatchToPropsディスパッチアクションを小道具としてマップできることを読んだので、addTodo.jsdispatch(addTodo())を呼び出す代わりにmapDispatchToPropsを使用するように書き換えることを考えました。呼んだ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.mapStateToPropsAddTodoコンポーネントから始めることは一度もなかったので、何が悪いのかわかりませんでした。私の直感は、それが先行すると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

完全なリポジトリはここにあります

だから私の質問は、mapStateToPropsなしでmapDispatchToPropsを実行することは可能ですか?私が受け入れようとしていることは何ですか-そうでない場合は、なぜですか?

回答:


144

はい、できます。null最初の引数として渡すだけです:

AddTodo = connect(
    null,
    mapDispatchToProps
)(AddTodo)

はい、それは単に許容できるプラクティスではなく、アクションをトリガーするための推奨される方法です。を使用mapDispatchToPropsすると、reactコンポーネント内でreduxを使用するという事実を隠すことができます


6
しかし、同じ方法でmapDispatchToPropsなしでmapStateToPropsを使用できますか?
Velizar Andreev Kitanov 2018

6
@VelizarAndreevKitanovはい
iofjuupasli 2018

22
のみを使用mapStateToPropsする場合は、2番目の引数を省略できますconnect。合格する必要はありませんnull
TheUtherSide 2018

1
逆の場合、mapDispatchToPropsのないmapStateToPropsにはnullを渡す必要はありません。mapStateToPropsのみを渡す
Rajesh Nasit

2
connect引数のリストの代わりにパラメータとしてオブジェクトリテラルを受け入れる必要があります。
Mahdi Pedram
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.