javascript - 考虑到性能和广告显示,如何使用 React 和样式化组件在 2 个响应式标题(移动和桌面)之间切换?
问题描述
这是我的情况:我有 2 个 Header 组件需要在移动设备和桌面设备之间切换。
<HeaderDesktop>
- 标识
- 搜索栏
- 带有下拉菜单的水平导航栏
<HeaderMobile>
- 较小的徽标
- 打开搜索栏的按钮
- 带有 AdSense 广告显示的 SideNav
我目前的做法
现在,我在这两者之间切换的是:
在1200px
断点处,我将它们的显示从 切换none
到flex
,反之亦然(参见下面的代码)。这按预期工作。
HeaderDesktopDIV = styled.div`
display: none;
@media only screen and (min-width: 1200px) {
display: flex;
}
`;
HeaderMobileDIV = styled.div`
display: flex;
@media only screen and (min-width: 1200px) {
display: none;
}
`;
我的顾虑
我担心的是这两个组件都是由 React 渲染的。我仍然可以在浏览器上检查这两个元素(见下图)。
这是完全有道理的,因为它们都存在并且已经由它们的父组件渲染Header
。唯一能让其中一个远离屏幕的是带有display: none
.
这也可能被认为是一件好事,因为它们之间的切换非常快。
我的问题
但是性能呢?
这是一个好习惯吗?我的意思是,我什至应该这样做吗?还有另一种可能更有效的方法吗?我的意思是,它们不是昂贵的组件,但如果它们是呢?
广告展示呢?
如果我在其上放置了SideNav
仅在移动版上显示的广告怎么办?不会是个问题吗?该广告将在桌面版本上呈现,但对用户隐藏。
我的意思是,Google adsense 也有办法让广告负责,但我正在使用另一个没有的广告合作伙伴?
解决方案
第一:如果您有一个功能强大的导航栏,它会损害您的性能。您可以通过为桌面创建 hoc(高阶组件)和为移动设备(或获取范围属性的动态 hoc)创建一个 hoc(高阶组件)来解决它,这将仅在屏幕宽度适合的情况下呈现子组件。
第二:在 Google Adsense 上违反政策!并且您的帐户可能会被阻止。我想大多数广告服务都是一样的。
推荐阅读
- java - 这是在 java8 中使用嵌套 groupby 的正确方法吗?
- flutter - 我需要添加三个文本的数据
- java - 我需要帮助创建一个函数,该函数将从 Java(Selenium)中的 CSV 文件读取(打开新的浏览器选项卡)url
- date - ISO 日期范围(如 1970--1979)的最后一天是哪一天?
- python - Python:裁剪图像并检测新的关键点
- python-3.x - 如何在没有输入标签的情况下在 selenium webdriver-python 中上传文件,Sendkeys
- excel - Excel - 如何计算包含列表的两列中的对
- r - 将面板网格置于前面
- django - Django(v. 1.11.3) HttpResponse 不返回指定的原因短语
- html - 无法加载角度图像