我正在 Hyperstack 项目中使用 MaterialUI 实现标题栏和菜单抽屉。我有两个组件,一个Header
组件和一个Menu
组件。该Menu
组件是可扩展的Drawer
。我将状态存储在Header
组件中,并将它和一个处理程序传递给Menu
组件,以在单击抽屉关闭按钮时切换抽屉状态。出于某种原因,抽屉只是快速而反复地打开和关闭。
在我实现关闭按钮之前,抽屉打开得很好。我尝试将状态向上移动到主应用程序组件并将其一直向下传递,但它会产生相同的结果。我尝试在组件上设置一个类函数并Header
从组件内调用它,Menu
而不是传入事件处理程序。
Header
组件_
class Header < HyperComponent
before_mount do
@drawer_open = false
end
def toggle_drawer
mutate @drawer_open = !@drawer_open
end
render(DIV) do
AppBar(position: 'static', class: 'appBar') do
Toolbar do
IconButton(class: 'menuButton', color: 'inherit', aria_label: 'Menu') do
MenuIcon(class: 'icon')
end
.on(:click) do
toggle_drawer
end
Typography(variant: 'h6', color: 'inherit', class: 'grow') { 'Admin Main' }
Button(color: 'inherit', class: 'float-right') { 'Login' } # unless App.history != '/admin'
end
end
Menu(open_drawer: @drawer_open, toggle_drawer: toggle_drawer)
end
end
Menu
组件_
class Menu < HyperComponent
param :open_drawer
param :toggle_drawer
def menu_items
%w(Main Inventory Customers)
end
def is_open?
@OpenDrawer
end
render(DIV) do
Drawer(className: 'drawer, drawerPaper', variant: 'persistent', anchor: 'left', open: is_open?) do
IconButton(className: 'drawerHeader') { ChevronLeftIcon() }
.on(:click) { @ToggleDrawer }
List do
menu_items.each do |mi|
ListItem(button: true, key: mi) { ListItemText(primary: mi) }
end
end
end
end
end
我希望抽屉在打开按钮单击时打开并在单击关闭按钮时关闭,但它只是非常迅速地打开和关闭。