簡潔的react路由,代替react-router,只要2K!

介紹一個很小的react路由:
路由地址:https://github.com/lanjingling0510/react-rainie-router

最近在做公司的CQASO移動端項目,用的react+redux。愛掏網 - it200.comspa單頁用react-router路由實現導航。愛掏網 - it200.com
路由如下:
html 代碼

     {
                if (!CQCommon.getUrlParam('code')) {
                    window.location.href = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxc5e9cdd2f3c79b07&redirect_uri=${window.encodeURIComponent('http://m.cqaso.com/bind')}&response_type=code&scope=snsapi_base&state=123#wechat_redirect`;
                    cb(new Error('not code'));
                    return;
                }
                require.ensure([], (require) => {
                    const Bind = require('./pages/bind.jsx');
                    cb(null, Bind.default);
                }, 'bind');
            }} />
         {
                if (!CQCommon.getUrlParam('code')) {
                    window.location.href = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxc5e9cdd2f3c79b07&redirect_uri=${window.encodeURIComponent('http://m.cqaso.com/unbind')}&response_type=code&scope=snsapi_base&state=123#wechat_redirect`;
                    cb(new Error('not code'));
                    return;
                }
                require.ensure([], (require) => {
                    const UnBind = require('./pages/unbind.jsx');
                    cb(null, UnBind.default);
                }, 'unbind');
            }} />
         {
                    require.ensure([], (require) => {
                        const Home = require('./pages/home.jsx');
                        cb(null, Home.default);
                    }, 'home');
                }} />
             {
                    require.ensure([], (require) => {
                        const Share = require('./pages/shareKeywords.jsx');
                        cb(null, Share.default);
                    }, 'login');
                }} />
             {
                    require.ensure([], (require) => {
                        const Login = require('./pages/login.jsx');
                        cb(null, Login.default);
                    }, 'login');
                }} />
             {
                    require.ensure([], (require) => {
                        const Register = require('./pages/register.jsx');
                        cb(null, Register.default);
                    }, 'register');
                }}
                onEnter={(nextState, replaceState) => {
                    // 如果登錄,跳轉到首頁
                    if (Profile.get()) {
                        replaceState('/');
                    }
                }} />
             {
                    require.ensure([], (require) => {
                        const AppList = require('./pages/appList.jsx');
                        cb(null, AppList.default);
                    }, 'appList');
                }} />
             {
                    require.ensure([], (require) => {
                        const TopList = require('./pages/topList.jsx');
                        cb(null, TopList.default);
                    }, 'topList');
                }} />
             {
                    require.ensure([], (require) => {
                        const keywordsRank = require('./pages/keywordsRank.jsx');
                        cb(null, keywordsRank.default);
                    }, 'keywordsRank');
                }} />
             {
                    require.ensure([], (require) => {
                        const keywordsAttent = require('./pages/keywordsAttent.jsx');
                        cb(null, keywordsAttent.default);
                    }, 'keywordsAttent');
                }} />
             {
                    require.ensure([], (require) => {
                        const keywordsCompare = require('./pages/keywordsCompare.jsx');
                        cb(null, keywordsCompare.default);
                    }, 'keywordsCompare');
                }} />
             {
                    require.ensure([], (require) => {
                        const keywordsHot = require('./pages/keywordsHot.jsx');
                        cb(null, keywordsHot.default);
                    }, 'keywordsHot');
                }} />
             {
                    require.ensure([], (require) => {
                        const keywordsHotDetail = require('./pages/keywordsHotDetail.jsx');
                        cb(null, keywordsHotDetail.default);
                    }, 'keywordsHotDetail');
                }} />
             {
                    require.ensure([], (require) => {
                        const CollectedKeywords = require('./pages/collectedKeywords.jsx');
                        cb(null, CollectedKeywords.default);
                    }, 'collectedKeywords');
                }} />
             {
                    require.ensure([], (require) => {
                        const Priority = require('./pages/priority.jsx');
                        cb(null, Priority.default);
                    }, 'priority');
                }} />
             {
                    require.ensure([], (require) => {
                        const Excavation = require('./pages/excavation.jsx');
                        cb(null, Excavation.default);
                    }, 'excavation');
                }} />
             {
                    require.ensure([], (require) => {
                        const Contact = require('./pages/contact.jsx');
                        cb(null, Contact.default);
                    }, 'contact');
                }} />
             {
                    require.ensure([], (require) => {
                        const AppLayOut = require('./layout/AppLayOut.jsx');
                        cb(null, AppLayOut);
                    }, 'applayout');
                }}>
                 {
                        require.ensure([], (require) => {
                            const Information = require('./pages/information.jsx');
                            cb(null, Information);
                        }, 'infomation');
                    }} />
                 {
                        require.ensure([], (require) => {
                            const Version = require('./pages/version.jsx');
                            cb(null, Version);
                        }, 'version');
                    }} />
                 {
                        require.ensure([], (require) => {
                            const Rank = require('./pages/rank.jsx');
                            cb(null, Rank);
                        }, 'rank');
                    }} />
                 {
                        require.ensure([], (require) => {
                            const Keywords = require('./pages/keywords.jsx');
                            cb(null, Keywords);
                        }, 'keywords');
                    }} />
                 {
                        require.ensure([], (require) => {
                            const Optimization = require('./pages/optimization.jsx');
                            cb(null, Optimization);
                        }, 'optimization');
                    }} />
                 {
                        require.ensure([], (require) => {
                            const Compare = require('./pages/compare.jsx');
                            cb(null, Compare);
                        }, 'compare');
                    }} />
                 {
                        require.ensure([], (require) => {
                            const Comments = require('./pages/comments.jsx');
                            cb(null, Comments);
                        }, 'comments');
                    }} />
                 {
                        require.ensure([], (require) => {
                            const Attends = require('./pages/attents.jsx');
                            cb(null, Attends);
                        }, 'attents');
                    }} />
            

每個頁面單獨請求(coding-split)后,公共模塊的js大小為120k(gzip壓縮后),加上分離出來的單個頁面的大小,導致首屏的渲染響應速度極低。愛掏網 - it200.com
如圖為app列表頁面的js文件大小:

為了提高首屏的響應速度,減小bundle的大小,我放棄了100多k的react-router,自己寫了一套功能,api一樣的路由。愛掏網 - it200.com
包含了Link,Router,Route,router,router組件動態獲取component, 通過listenBofore函數可添加路由過渡動畫的邏輯等。愛掏網 - it200.com
路由如下:
html 代碼

     Router>
        

廢棄react-router后,看到bundle.js減少13k,13k雖少,但對于移動端來說是多么重要。愛掏網 - it200.com

路由地址:https://github.com/lanjingling0510/react-rainie-router

聲明:所有內容來自互聯網搜索結果,不保證100%準確性,僅供參考。如若本站內容侵犯了原著者的合法權益,可聯系我們進行處理。
發表評論
更多 網友評論0 條評論)
暫無評論

返回頂部

主站蜘蛛池模板: 国产伦子系列视频6| 国产第一页亚洲| 国产呻吟久久久久久久92| 亚洲国产精品综合一区在线| 国产香蕉一区二区在线网站| 成人毛片免费播放| 国产中文字幕在线免费观看| blacked欧美一区二区| 机机对机机的30分钟免费软件| 国产一级毛片在线| 99久久超碰中文字幕伊人| 日韩欧美亚洲每的更新在线| 免费一级特黄特色大片在线观看| www.九色视频| 最新亚洲人成无码网www电影 | 男人边吃奶边摸下边的视频| 国产精品99久久不卡| 一级特黄女**毛片| 欧美亚洲黄色片| 公交车老师屁股迎合我摩擦 | 欧美理论片在线观看一区二区| 国产区香蕉精品系列在线观看不卡| ffee性护士vihaos中国| 日韩精品无码久久一区二区三 | 无码一区二区三区免费| 亚洲欧美另类专区| 老司机午夜免费福利视频| 国产精品成人免费综合| 中文亚洲av片不卡在线观看| 欧美亚洲综合在线| 免费看三级毛片| 青青操在线免费观看| 国内精品卡1卡2卡区别| 中韩高清无专码区2021曰| 欧美成人免费全部网站| 制服丝袜自拍偷拍| 麻豆国产三级在线观看| 国产色无码精品视频国产| 三上悠亚在线观看免费| 最近更新2019中文字幕8 | 91人成在线观看网站|