【发布时间】:2018-05-19 08:02:49
【问题描述】:
我正在分解 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
但是,当我运行应用程序时,我收到此错误:Error: Invalid value of type object for mapStateToProps argument when connecting component AddTodo.。我从来没有在 AddTodo 组件上使用mapStateToProps,所以我不确定出了什么问题。我的直觉告诉我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
可以在here找到完整的repo。
所以我的问题是,是否可以在没有 mapStateToProps 的情况下执行 mapDispatchToProps?我正在尝试做的做法是可接受的做法吗?如果不是,为什么不呢?
【问题讨论】:
标签: javascript reactjs redux react-redux