你看到的日志 @@router/LOCATION_CHANGE 可能是react-router调度的一个动作。
@@router/LOCATION_CHANGE
但是我发现你的第二个实现存在问题。
在第一个例子中(其中 extends React.component 你已经 @connect ed导入的动作 changeActiveMenu 至 Mortgage 。在里面 handleItemClick 你是 的 派遣行动 强> 如 this.props.changeActiveMenu("test1", "test2") 。
extends React.component
@connect
changeActiveMenu
Mortgage
handleItemClick
this.props.changeActiveMenu("test1", "test2")
在第二个例子中(使用 React.createClass ),我看到你有两个组成部分。 Main和PrimaryMenu。你有 @connect ED changeActiveMenu 到Main,因此Main接收它作为道具。然后在PrimaryMenu里面 handleItemClick 你是 的 调用 强> 动作创作者为 changeActiveMenu("primary", name) 。
React.createClass
changeActiveMenu("primary", name)
您可能已经注意到上面两段中的粗体字。调用动作创建者和派遣动作创建者之间存在差异。
的 要思考的要点: 强>
return
type
dispatch
所以在你的第二个例子中,你只是调用它,而不是用它包装它 dispatch 。当你 mapDispatchToProps (我看到你已经使用了一个很好的短手)里面 @connect ,动作创作者基本上用一个包裹着 dispatch 并作为道具传递给组件。
mapDispatchToProps
所以你能做的是:
export default connect( state => ({ app: state.get('app'), routing: state.get('routing') }), { changeActiveMenu } )(PrimaryMenu)
连接状态键没有意义 app 和 routing 主要组件为Main不会使用那些道具而不是传递给PrimaryMenu。那么我们 @connect PrimaryMenu上的一切。
app
routing
然后是PrimaryMenu的 handleItemClick :
handleItemClick (e, { name }) { this.props.changeActiveMenu("primary", name); }