私はそれを理解しようとするためにReduxのtodoの例を分解しています。mapDispatchToProps
ディスパッチアクションを小道具としてマップできることを読んだので、addTodo.js
dispatch(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.
。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
完全なリポジトリはここにあります。
だから私の質問は、mapStateToPropsなしでmapDispatchToPropsを実行することは可能ですか?私が受け入れようとしていることは何ですか-そうでない場合は、なぜですか?