国产精品美女久久久浪潮AV,国产精品三级一二三区,久久精品国产一区二区小说 ,依依成人影视国产精品,全部无卡免费的毛片在线看,日本一区二区三深夜不卡,国产精品女同一区二区久久,国产精品夜色一区二区三区

        新版vue-router的hooks用法

        2020-5-2    seo達人

        雖然Vue 3還沒有正式發(fā)布,但是熱愛新技術的我早已按捺不住自己的內心,開始嘗試在小項目中使用它了。


        根據(jù)這篇《今日凌晨Vue3 beta版震撼發(fā)布,竟然公開支持腳手架項目!》我搭建了一個Vue 3的腳手架項目,用這種方式搭建的腳手架項目不僅僅只有vue是新版的,就連vue-router、vuex都是的。


        給大家截一下package.json的圖:




        可以看到vue-router和vuex都已經(jīng)開啟4.0時代啦!


        不過其實我并沒有去了解過vue-router 4.0的新用法什么的,因為我覺得它不像vue 3.0都已經(jīng)進行到beta的版本不會有特別大的變動。


        而vue-router 4.0還是alpha的階段,所以我認為現(xiàn)在去學習它有些為時尚早。但卻就是它!差點釀成了一場慘劇。


        舊版vue + vue-router的使用方式

        假如你在路由里面定義了一個動態(tài)參數(shù)通常都會這么寫:


        {

           path: '/:id'

        }

        然后用編程式導航的時候通常會這樣去寫:


        this.$router.push('/123')

        在組件中是這樣獲取這個參數(shù)的:


        this.$route.params.id

        我以為的新版vue + vue-router的使用方式

        由于vue 3.0的Composition API中沒有this了,所以我想到了通過獲取組件實例的方式來獲取$route:


        import { defineComponent, getCurrentInstance } from 'vue'


        export default defineComponent((props, context) => {

           const { ctx } = getCurrentInstance()

           

           console.log(ctx.$route)

        })

        沒想到打印出來的居然是undefined!

        這是咋回事呢?

        于是我又打印了一遍ctx(ctx是當前組件上下文):




        沒有$的那些字段是我在組件中自己定義的變量,帶$的這些就是vue內置的了,找了半天發(fā)現(xiàn)沒有$route了,只剩下了一個$router,估計vue-router 4.0把當前路由信息都轉移到$router里面去了。


        帶著猜想,我點開了$router:




        currentRoute! 看名字的話感覺應該就是它了!于是乎我:


        import { defineComponent, getCurrentInstance } from 'vue'


        export default defineComponent((props, context) => {

           const { ctx } = getCurrentInstance()

           

           console.log(ctx.$router.currentRoute.value.params.id)

        })

        果然獲取到了!好開心!


        實際的新版vue + vue-router用法

        在接下來的過程中我用ctx.$router代替了原來的this.$router、用ctx.$router.currentRoute.value代替了原先的this.$route。


        盡管在接下來的進度中并沒有出現(xiàn)任何的bug,程序一直都是按照我所設想的那樣去運行的。


        但在項目打包后卻出現(xiàn)了意想不到的bug:在跳轉路由的時候報了一個在undefined上面沒有push的錯誤。


        奇了怪了,在開發(fā)階段程序都沒有任何的報錯怎么一打包就不行了呢?根據(jù)我多年的開發(fā)經(jīng)驗,我很快就定位到了是vue-router的錯誤。


        難道這樣寫是錯的嗎?可是我打印了ctx,它里面明明有一個$router、$router里面明明就有currentRoute、currentRoute里面明明就有一個value、value里面明明就有params、params里面我一點開明明就看到了傳過來的參數(shù)啊:




        估計可能是vue-router的bug,果然alpha階段的產物不靠譜,我開始后悔使用新版的vue腳手架項目了。


        vue-router里的hooks

        不過這時我突然靈光一現(xiàn),vue 3不是受到了react hooks的啟發(fā)才產生了Composition API的嗎?


        那么估計vue-router肯定也會受到react-router的啟發(fā)了!


        還好我學過react,果然技多不壓身?。」烙嬂锩婵隙ㄊ怯幸粋€useXxx,就像這樣:


        import { useXxx } from 'vue-router'

        那么應該是use什么呢?按理來說應該會盡量的和以前的API保持一定的聯(lián)系,我猜應該是useRoute和useRouter吧!


        為了驗證我的想法,我打開了node_modules找到了vue-router的源碼:




        果不其然,在第2454和第2455行我發(fā)現(xiàn)它導出了useRoute和useRouter,那么就是它了:


        import { defineComponent } from 'vue'

        import { useRoute, useRouter } from 'vue-router'


        export default defineComponent(_ => {

           const route = useRoute()

           const router = useRouter()


           console.log(route.params.id)

           router.push('/xxx/xxx')

        })

        使用這種方式不但可以成功跳轉路由,也同樣可以獲取到路由傳過來的參數(shù),這次再打包試了一下,果然就沒有之前的那個報錯了。


        結語

        估計以后的vue全家桶要開啟全民hooks的時代了,在翻看源碼的同時我發(fā)現(xiàn)他們把一些示例都寫在了vue-router/playground文件夾下了,在里面我發(fā)現(xiàn)了一些有趣的用法。


        如果有時間的話我會仔細研究一下然后出一篇更加深入的文章給大家,當然如果已經(jīng)有小伙伴等不及我出新文章的話可以直接進入vue-router-next的github地址:


        https://github.com/vuejs/vue-router-next

        它的示例都放在了playground這個文件夾下,期待你們研究明白后出一篇更加深入的文章!

        日歷

        鏈接

        個人資料

        藍藍設計的小編 http://m.shtzxx.cn

        存檔

        主站蜘蛛池模板: 一区二区三区无码高清视频| 日本熟妇8ksextubespage| 97色婷婷| 色婷婷在线精品国自产拍| 国产激情视频在线观看的| 渭源县| 亚洲综合一区国产精品| 日本无遮挡吸乳呻吟视频| 网曝吃瓜黑料一区| 在厨房被c到高潮| 久热国产vs视频在线观看| 久久久久国色av免费观看| 北条麻妃一区二区三区av高清| 亚洲中文字幕久久无码精品| 亚洲精品成人片在线观看| 任我爽精品视频在线播放| 中文字幕乱码人在线视频1区| 河南妇女毛浓浓bw| 最近2019中文免费字幕在线观看| 固阳县| 好屌爽在线视频| 欧美性爽xyxoooo| 日本欧美视频在线观看| 房东老头揉捏吃我奶头影片| 芒果乱码一线二线三线新区| 四虎成人精品一区二区免费网站| 中国免费毛片网络| 99久久亚洲综合精品成人网 | 柏乡县| 亚洲成av人片在www色猫咪| 成人午夜精品无码区久久| 久久久噜噜噜www成人网| 亚洲精品无码永久在线观看性色 | 人人妻人人玩人人澡人人爽| 国产美女露脸口爆吞精| 日本免费一区二区三区高清视频| 亚洲夜夜性无码| 日本亚洲欧洲另类图片| 花垣县| 九九在线中文字幕无码| 乱码1/2|