如何直接跳转移动端页面 避免先闪过PC端页面的问题
根因分析
你当前的跳转逻辑写在PC端Frame组件的副作用中,不管是useEffect还是useLayoutEffect,触发时机都晚于组件的首次渲染初始化,因此移动端访问时必然会先渲染部分PC页面内容再执行跳转,才会出现闪屏问题。
解决方案
方案1:路由层前置判断,直接渲染对应组件(无跳转、体验最优)
直接在路由配置层完成设备判断,无需客户端跳转,完全不会渲染PC端内容:
// route.js // 提前引入你的设备判断方法 import { mobileDevice } from './your-utils-path' export default props => ( <Router> <Switch> <Route path='/page/index' render={routeProps => { // 渲染组件前直接判断设备,匹配对应组件 if(mobileDevice()) return <Mobile {...routeProps} /> return <Frame {...routeProps} /> }} /> <Route path='/mobile/index' component={ Mobile } /> </Switch> </Router> )
修改后直接删除Frame组件内的跳转逻辑即可,访问/page/index时会直接返回对应设备的组件,完全没有闪屏。
方案2:路由层重定向(保留路径切换需求)
如果要求移动端访问时地址栏路径必须切换为/mobile/index,可以用React Router自带的Redirect组件实现无感知重定向,不会触发PC组件渲染:
// route.js import { Redirect } from 'react-router-dom' import { mobileDevice } from './your-utils-path' export default props => ( <Router> <Switch> <Route path='/page/index' render={routeProps => { if(mobileDevice()) return <Redirect to="/mobile/index" /> return <Frame {...routeProps} /> }} /> <Route path='/mobile/index' component={ Mobile } /> </Switch> </Router> )
优化建议
如果你的mobileDevice方法依赖异步加载的UA解析库,建议在应用根入口(如index.js)就提前执行判断,将结果存在全局变量中,避免路由渲染时才执行判断导致的延迟。
内容的提问来源于stack exchange,提问作者will
相关产品推荐
相关产品推荐

