这是在preact / react中为台式机和移动设备实现单独网站的最佳方式

穆迪·夏尔马

我正在使用preact和nginx进行项目。现在,我处于一种情况,我们需要不同的UI,并且在少数情况下,与台式机相比,移动设备的流程有所不同。我探索了一些实现此方法的方法,但仍然感到困惑,并且不确定哪种方法是最佳的实现方法。

1)使用其他网址使用nginx重定向移动设备(https://m.example.com)。MDN还建议,何时为不同的设备使用不同的url

server {
    ...
    server_name www.example.com;
    ...
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-Server $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    location / {
        if ($http_user_agent ~* ...) {
            rewrite ^ /m$request_uri last;
        }
        proxy_pass http://localhost:8080;
    }
    location /m {
        proxy_pass http://localhost:8080;
    }
}

缺点:这将需要为移动设备创建单独的存储库,从而导致维护两个项目。

有没有一种方法可以解决此问题而无需创建单独的项目?

2)对所有设备使用相同的url,但使用诸如mobile-device-detect检测用户代理和有条件调用组件之类的包从根组件创建单独的组件。

import { isMobile } from 'mobile-device-detect'
export default class App extends Component {
   render(props) {
      return (
         {!!isMobile ? <MobileComponent /> : <DesktopComponent />}
      )
   }
}

缺点:此方法将增加捆绑包的大小,这可能会非常昂贵。

3)以上观点的解决方案可以是代码拆分和延迟加载。但是如何基于用户代理/用户设备来延迟加载呢?

哈迪布·法汉(Hadeeb Farhan)

1)您可以从同一代码库创建2个应用。使用针对移动和桌面网站的不同入口点运行捆绑程序两次。您可以重用钩子,实用程序功能,状态管理等。

2,3)懒惰的负载<MobileComponent /><DesktopComponent />并且(P)React.lazy和你在一起很好。(假设您不需要服务器端渲染)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

从台式机作为移动设备访问网站?

在Preact中渲染React组件?

Bootstrap导航栏-在台式机和移动设备中对齐元素

CSS媒体可在移动设备和台式机中隐藏/显示div?

如何在A-Frame中检测台式机,移动设备,GearVR,Oculus Rift和Vive?

用于生产的Preact和Webpack

如何使用AngularJS检测设备是否为台式机和/或移动设备以及连接是否为wifi

在台式机和移动设备上为2列和3列编写Flexbox代码(自动换行)

Android设备被归类为台式机

与Preact中的React.FC类型等效

流程:解构。React / Preact中缺少注释

在移动设备上显示与台式机完全相同的响应式网站

图像网格:台式机为5 x 5,而移动设备为3 x 9

将React Dev Tools与Preact结合使用

React(Preact)渲染两次内容

preact-cli 和 firebase 静态部署

媒体查询以狭窄的台式机而非移动设备为目标

在 Preact 中滚动到特定组件

将元素放置在“发光”应用中,以便为移动和台式机显示器调整大小

Angular中移动设备和台式机的不同布局/路线

在台式机和移动设备上检测点击(或触摸)的最可靠方法是什么?

媒体查询:如何定位台式机,平板电脑和移动设备?

如何在台式机、平板电脑和移动设备上获得相同的显示效果

媒体查询图像以在台式机和移动设备上工作

HTML电子邮件-用于台式机和移动设备的不同图像

AngularJS:针对台式机和移动设备使用不同的模板吗?

台式机和移动设备之间的C#平台检测

构建适用于移动设备和台式机的Flutter应用程序

适用于移动设备和台式机的前端页面有什么优势?