reactjs - 动态填充菜单组件 - React Material UI
问题描述
我有一张桌子,我想根据用户点击的位置显示一个带有不同选项的上下文菜单。例如,我想在用户单击表格单元格时显示一些选项,当用户单击标题时显示一些其他选项等等。
如果发生某些事件,我还希望能够禁用菜单中的某些选项。我正在使用 redux 来跟踪我的状态。
我想知道的是:我是否应该为每种类型的菜单选项实现一个组件,以便我可以专门为每个选项分配一个功能和启用/禁用状态?我应该直接从 redux 处理选项吗?
到现在为止我想做什么:
选项 1:每个选项列表的不同组件
const CellOptions = () => {
const isOption1Disabled = useSelector(selectIsOption1Disabled);
const isOption2Disabled = useSelector(selectIsOption2Disabled);
const doSomething = () => console.log('hello');
const doSomethingElse = () => console.log('hello word');
return (
<>
<MenuItem onClick={dosomething} disabled={isOption1Disabled}>option1<MenuItem>
<MenuItem onClick={doSomethingElse} disabled={isOption2Disabled}>option1<MenuItem>
</>
)
}
const HeaderOptions = () => {
const isOption1Disabled = useSelector(selectIsOption1Disabled);
const isOption2Disabled = useSelector(selectIsOption2Disabled);
const doSomething = () => console.log('hello');
const doSomethingElse = () => console.log('hello word');
return (
<>
<MenuItem onClick={dosomething} disabled={isOption1Disabled}>option1<MenuItem>
<MenuItem onClick={doSomethingElse} disabled={isOption2Disabled}>option1<MenuItem>
</>
)
}
等等。然后,我将根据本地组件状态(用户单击的位置)有条件地渲染每个组件。
选项 2:使用描述当前选项的对象
export const CONTEXT_MENU_ACTIONS: Record<string, Action[][]> = {
cell: [
[
{
id: 'option1',
label: 'Option 1',
},
{
id: 'option2',
label: 'Option2'
}
]
],
header: [
[
{
id: 'option1',
label: 'Option1',
}
]
]
};
然后根据本地状态渲染一个特定的选项。问题在于我不确定如何为每个选项分配一个 onClick 函数。当然,我可以获取所选选项的 id,然后使用 if else 链调用特定函数,但这听起来真的很难看。而且我不确定如何通过选择器分配来自 redux 的禁用状态。
解决方案
推荐阅读
- php - Jquery Autocomplete UI 收到 json 但仍未显示为自动填充
- linux - For 循环的双变量展开
- php - 保存元框值不起作用 [WP-PHP]
- angular - Angular 将变量传递给 HTTP GET
- ios - 将参数从 CollectionViewController 传递到 CollectionViewCell
- c# - 即使安装了 .net 核心,也找不到它。我应该重新启动我的 Mac 以使用 microsoft stack 吗?
- java - Hadoop 映射器直接写入输出。(Reducer 写入 mapper 的输出)
- javascript - 如何使用插件 jscrollpane 修复thead?
- php - 如何以 XML 版本和编码输出 (PHP)
- asp.net-mvc - 显示上传文件列表