我正在尝试使用MenuItem创建菜单,从头开始。我正在使用React 0.14和Redux,以及CoffeeScript(cjsx)。 (我刚刚开始使用所有这些)React/Redux - 菜单和项目的父项和子项之间的事件
我被卡住了,因为我不知道如何给MenuItem(s)引用回调函数onChildrenClick
。因为它们是通过{this.props.children}
生成的,我不知道我应该如何在那里添加props
。
Menu.cjsx
React = require 'react'
class Menu extends React.Component
@propTypes =
children: React.PropTypes.array.isRequired
render: ->
<div className="ui pointing menu">
{this.props.children} # I don't see how I can bind the "onChildrenClick" function to the child, because they're generated outside of this scope. Maybe by looping on "this.props.children"? I tried but it wasn't successful.
</div>
onChildrenClick: (event) ->
console.log event
module.exports = Menu
MenuItem.cjsx
React = require 'react'
classNames = require('classnames')
class MenuItem extends React.Component
@propTypes =
label: React.PropTypes.string.isRequired
active: React.PropTypes.bool
constructor: (props) ->
super props
@state =
classes: classNames(
'ui'
'item'
'active': this.props.active
)
render: ->
<a className={@state.classes} onClick={@onClick}>
{ this.props.label }
</a>
onClick: =>
console.log Object.assign @state.classes, {active: [email protected]}
@setState({classes: Object.assign @state.classes, {active: true}})
console.log @state.classes # I need to notify the parent so it can notify the current active children to get disabled.
module.exports = MenuItem
下面是我建立我的菜单及其项目:
<Menu>
<MenuItem active={true} label="Menu 1"></MenuItem>
<MenuItem label="Menu 2"></MenuItem>
<MenuItem label="Menu 3"></MenuItem>
</Menu>
在这个例子中,我手动生成“菜单1 ... 3“,但它们实际上是动态生成的。
我不知道我是否在这里得到了正确的方法。也许我应该使用Redux来做这件事?最后,我应该使用Routes
,因为每个菜单项都应该有自己的网址(角等,与#menu-1
,例如)
我也想知道这将是给一个菜单项内容的最佳方法。感谢您的见解。
我曾考虑过其他选项,但我对内容并不确定。因为每个MenuItem应该以某种方式与要显示的内容相关。或者它可能是一个链接...在这种情况下,改变uri路径。 – Vadorequest
@Vadorequest啊,我明白了 - 也许把这件物品作为一个“小孩”来传递就够了?在这种情况下,它更像是一个'MenuItem'包装:'' – lux