在网络上,我看到代码通过import comtypes
word = comtypes.client.CreateObject('Word.Application')
doc = word.Documents.Open(src_filename)
传递来自this.props.dispatch
函数的connect
直接从组件调度。我的问题是:为什么不直接从actions文件调度而不是仅仅将一个操作对象返回到组件并从那里调度?我觉得我在这里错过了一些东西。直接从组件调度感觉有点不对,就像当我们可以简单地调用一个函数,传递所需内容,并让动作创建者在我们的反应组件之外为我们进行调度时。
以下是我的意思的简短示例:https://gist.github.com/overthemike/5481dab563c7f97f4151ab1c8c9cb4f1
我错过了什么?
答案 0 :(得分:2)
这只是一种方法。必须选择你喜欢的东西并且更适合你的代码风格。
我最喜欢的方式就是这样,用ES6:
import { actionA, actionB } from 'path/to/redux/actions'
class MyComponent extends React.Component { ... }
const mapStateToPros = {...}
const mapDispatchToProps = { actionA, actionB }
export default connect(mapStateToPros, mapDispatchToProps)(MyComponent)
通过对mapDispatchToProps
使用简写表示法,MyComponent
将接收函数actionA
和actionB
作为道具,并且可以使用this.props.actionA
进行调用。 const mapDispatchToProps = { actionA, actionB }
将redux
解释为:{/ 1>
const mapDispatchToProps = (dispatch) => {
return {
actionA: (...args) => {dispatch(actionA(...args))},
actionB: ...,
}
}
因此,调用this.props.actionA()
实际上是在调用dispatch(actionA())
答案 1 :(得分:2)
你可以直接在连接的组件中调用this.props.dispatch()
。但是,我更喜欢保留我的React组件" unaware" Redux没有直接引用dispatch
,而是将其他函数称为道具。这样,组件不知道或不关心函数是绑定的Redux动作创建者,来自父级的回调,还是测试中的模拟函数。
正如@cfraser所说,我强烈建议使用"对象速记"将动作创建者传递给connect
的语法。
您可能会对我的帖子Idiomatic Redux: Why Use Action Creators?感兴趣,该帖子会详细介绍该主题。
根据您对可追溯性的评论:您将从传递给组件的动作创建者,动作创建者定义,动作类型以及响应该动作类型的减速器向后退步。