反应动态上下文 menu/submenu
React dynamic context menu/submenu
使用 React 上下文菜单,在应用时动态创建带有子菜单的菜单,我能够成功呈现菜单,但我无法让子菜单工作。
import React, { Component } from 'react';
import ContextMenuTrigger from 'src/ContextMenuTrigger';
import ContextMenu from 'src/ContextMenu';
import MenuItem from 'src/MenuItem';
import SubMenu from 'src/SubMenu';
const MENU_TYPE = 'SIMPLE';
const targets= [
{
name: 'Banana',
},
{
name: 'Apple',
subname: [
{
value: 'Red Apple',
description: 'description for red apple'
},
{
value: 'Green Apple',
description: 'description for green apple'
}
]
},
{
name: 'Grapes',
},
{
name: 'Orange',
subname: [
{
value: 'Orange Juice',
description: 'description for Orange'
},
{
value: 'Orange Color',
description: 'description for Orange'
}
]
}
];
export default class SimpleMenu extends Component {
constructor(props) {
super(props);
}
render() {
return (
<div>
<ContextMenuTrigger id={MENU_TYPE}>
<div className='well'>right click menu</div>
</ContextMenuTrigger>
<ContextMenu id={MENU_TYPE}>
{targets.map((item) => {
return (
<MenuItem>
{item.name}
<SubMenu>
{item.subname.map(action => {
{action.value}
})}
</SubMenu>
</MenuItem>
)
})}
</ContextMenu>
</div>
);
}
}
我在以下方面遇到错误:
targets.subname.map(action => {{action.value}})}
错误:类型错误:item.subname 未定义
有没有更好的映射抛出嵌套对象的方法?
objective是从对象动态构建菜单和子菜单。
我认为您想要 item.subname
(而不是 targets.subname
),然后您想要添加存在性检查,因为并非所有项目都有 subname
字段。
更新并检查是否存在:
{item.subname && item.subname.map()}
添加到 Colin 的回复中(他说你真的在那个上下文中寻找 item.subname,这看起来比你的 target.subname.map 更合适,因为你在一个包含 item 在其范围内的函数中),确保您的组件处理 item.subname 未定义的情况;你可以做
item.subname != undefined ? 'render submenu items if any' : 'do nothing if undefined';
使用 React 上下文菜单,在应用时动态创建带有子菜单的菜单,我能够成功呈现菜单,但我无法让子菜单工作。
import React, { Component } from 'react';
import ContextMenuTrigger from 'src/ContextMenuTrigger';
import ContextMenu from 'src/ContextMenu';
import MenuItem from 'src/MenuItem';
import SubMenu from 'src/SubMenu';
const MENU_TYPE = 'SIMPLE';
const targets= [
{
name: 'Banana',
},
{
name: 'Apple',
subname: [
{
value: 'Red Apple',
description: 'description for red apple'
},
{
value: 'Green Apple',
description: 'description for green apple'
}
]
},
{
name: 'Grapes',
},
{
name: 'Orange',
subname: [
{
value: 'Orange Juice',
description: 'description for Orange'
},
{
value: 'Orange Color',
description: 'description for Orange'
}
]
}
];
export default class SimpleMenu extends Component {
constructor(props) {
super(props);
}
render() {
return (
<div>
<ContextMenuTrigger id={MENU_TYPE}>
<div className='well'>right click menu</div>
</ContextMenuTrigger>
<ContextMenu id={MENU_TYPE}>
{targets.map((item) => {
return (
<MenuItem>
{item.name}
<SubMenu>
{item.subname.map(action => {
{action.value}
})}
</SubMenu>
</MenuItem>
)
})}
</ContextMenu>
</div>
);
}
}
我在以下方面遇到错误:
targets.subname.map(action => {{action.value}})}
错误:类型错误:item.subname 未定义
有没有更好的映射抛出嵌套对象的方法?
objective是从对象动态构建菜单和子菜单。
我认为您想要 item.subname
(而不是 targets.subname
),然后您想要添加存在性检查,因为并非所有项目都有 subname
字段。
更新并检查是否存在:
{item.subname && item.subname.map()}
添加到 Colin 的回复中(他说你真的在那个上下文中寻找 item.subname,这看起来比你的 target.subname.map 更合适,因为你在一个包含 item 在其范围内的函数中),确保您的组件处理 item.subname 未定义的情况;你可以做
item.subname != undefined ? 'render submenu items if any' : 'do nothing if undefined';