reactjs - 如何在反应中渲染可变组件
问题描述
我想在所有页面中的 react 和 MobileNav 中渲染一个变量组件。我发现 React.cloneElement 是可行的,但不能将我的 MobileNav 传递给它。
const index: React.FC<LayoutProps> = ({ children, type }) => {
let Layout = null;
const { onToggleOpen, isOpen } = useHamburger();
switch (type) {
case "home": {
Layout = <HomeLayout />;
break;
}
case "basic": {
Layout = <BasicBlogLayout />;
break;
}
case "list": {
//
break;
}
default: {
Layout = <HomeLayout />;
}
}
return (
<Layout>
<MobileNav onClick={onToggleOpen} isOpen={isOpen} />
{children}
</Layout>
);
// return React.cloneElement(Layout, { children }); // this is work, but i also need render MobileNav.
};
export default index;
解决方案
当您说 时Layout = <HomeLayout />;
,您已经在创建一个组件的实例。
你真正需要做的是Layout = HomeLayout;
这就是,你得到了这个类,然后你可以随心所欲地使用它。
const index: React.FC<LayoutProps> = ({ children, type }) => {
let Layout = null;
const { onToggleOpen, isOpen } = useHamburger();
switch (type) {
case "home": {
Layout = HomeLayout;
break;
}
case "basic": {
Layout = BasicBlogLayout;
break;
}
case "list": {
//
break;
}
default: {
Layout = HomeLayout;
}
}
return (
<Layout>
<MobileNav onClick={onToggleOpen} isOpen={isOpen} />
{children}
</Layout>
);
};
export default index;
推荐阅读
- python - 如何使用 python-docx 从 docx 文档中提取索引标记数据?
- angular - 当我更改选项时,角度谷歌地图不会重新加载
- linux - linux中的useradd脚本不使用passwd
- javascript - 无法将字符串分配给 MenuItem 的文本属性
- excel - File Name Extract From String works every other time
- vue.js - 上下文菜单中缺少新选项卡中的打开链接
- pandas - Pandas 数据框将数据聚合为每组的计数
- c++ - wxWidgets 中的 Unicode
- java - 如何使用 apache tomcat servlet 导航到另一个 html 文件并发送 jinja 变量?
- javascript - 转译较新的 Javascript 语法时,如何让 TypeScript 输出更少繁琐的代码?