【发布时间】:2022-01-14 08:32:00
【问题描述】:
我想要什么:
我想在更改/更新defaultOpenKeys 值时打开(展开)特定菜单的子菜单。
我的尝试:
const [submenu, setSubmenu] = useState([]);
useEffect(() => {
setSubmenu(["sub1"]);
}, []);
...
<Menu style={{ width: 256 }} defaultSelectedKeys={["4"]} defaultOpenKeys={submenu} mode="inline">
<Menu.Item key="1">Option 1</Menu.Item>
<Menu.Item key="2">Option 2</Menu.Item>
<SubMenu key="sub1" title="Submenu">
<Menu.Item key="3">Option 3</Menu.Item>
<Menu.Item key="4">Option 4</Menu.Item>
</SubMenu>
</Menu>;
在这里,子菜单一开始是一个空数组,但每当页面加载时,useEffect 会更新submenu 的值并设置为["sub1"]。我相信,每当状态值发生变化时,页面都应该重新渲染,所以<Menu defaultOpenKeys={['sub1']} ...> 应该像这样更新,对吧?
但是在这里,如果我首先通过<Menu defaultOpenKeys=['sub1'] ... >,那么这会按我的预期工作,但是如果我从状态传递defaultOpenKeys 值,那么这不会像我预期的那样工作(如果状态的初始值是['sub1'] 那么它也可以正常工作)。
这是代码沙箱,我在其中包含了工作和不工作的演示。
更新:
@HDM91 回答后,
我尝试过使用antd提供的另一个道具openKeys,它一开始确实打开了子菜单,但无法关闭它,甚至它确实阻止了其他子菜单的打开/关闭。
<Menu
style={{ width: 256 }}
defaultSelectedKeys={["4"]}
openKeys={submenu} // blocks other submenu by closing and opening
mode="inline"
>
【问题讨论】:
-
openKeys 道具怎么样?
-
嗨@HDM91,我已经尝试通过制作子组件并传递道具来进行尝试,但似乎不起作用。