react 动态路 嵌套动子路由_2020年,我是如何从一名Vueer转岗到React阵营
前言
大家好呀,我是一名專注于Vue的前端萌新。 國慶后如約和大家見面了。經歷了金九銀十和十一長假后的我也要開始努力寫文章了,這次主要是分享下我是如何快速橫切到React技術棧。如果看文章的你正在學習React或者說也是轉換技術棧,那么本文一定能夠給你有一些啟發和幫助。
如果覺得不錯的話,小手輕點下贊哦,有好的想法和問題可以在評論區中留言。作為摸魚小能手,我每天都會刷掘金的哦。為什么換React
為什么換React呢,是因為新公司是屬于React技術棧。包括Taro,Umi等一系列的解決方案。雖然在技術棧方向上進行了更換,但對于需要隨時適應新技術棧且保持學習的小王同學來說,上手難度一般,熟練使用Vue的同時對于一些組件化和工程化項目都是有著自己的理解的。因此在學習了兩三天后就對于簡單的模塊上收起來還是非常簡單的。因此,在這個9月,我成為了一名Reacter。但同時,我依舊也是積極的在學習Vue3,做一名雙開的前端看起來并不是一件非常困難的事情。Vue 和 React的區別
本質上的區別
誠然,都是組件化的解決方案,但其實Vue 和 React區別還是比較巨大的。同時,這也是一道非常廣義的面試題。因此,在這里和大家說一個重點,別在弄錯了,在弄錯出去面壁思過:
我,React,我只是一個構建頁面的library,不是一個framework,不要在把我和隔離那個流氓進行扒底褲的分析對比了,你以為我在大氣層,其實我在臭氧層。數據渲染的區別
在數據渲染的方式上,
Vue采用的是響應式數據渲染,你修改了響應式數據對應的視圖也進行渲染,相當于更新通知時Vue幫你做了,開發者只需要關注數據的修改。
React則是setState手動更新數據,通過setState更新state的值來達到重新render視圖的效果,開發者只需要關注什么時候進行state的更改和重新render。
API上的區別
在我使用React以來,一直覺得Vue的template在處理上更加優雅于React的jsx,并不是語法上的優于,而是從數據代理的根本上,在Class Component中在render中會存在大量porps, state的解構算是一個痛點,畢竟如果每次都需要把this寫上整個代碼塊就變得非常的亂了,因此Vue對template則不需要通過this.data.xxx來渲染options api等內容。
其次就是我一直覺得Vue的生命周期是比較好理解的,而React的生命周期確是有點混亂,在新的版本當中更是廢棄和取代了一些鉤子,這就導致了技術差異性,很多文章可能還停留在以前的一個API版本。
不過在Vue和React新的API都是進化為Hooks的模式了,所以這些問題也就顯得不怎么重要了,在2020年,如果你還在學習前端,Hook思想是必備的學習之路之一。
腳手架開始
年輕人的第一款腳手架為何只能是create-react-app?眾所周知,官方的腳手架非常的難用,不僅配置起來麻煩,一些plugin都需要自己去集成,可謂是新手勸退第一步,我不學了,我要用VueCli。所以,如果是Vue開發者剛接手React,我推薦umi,作為React的重要開源團隊,螞蟻團隊給React貢獻了非常多的開源工具,如ant design, dva, umi等大大方便了開發的整合。從現有角度來說,一般公司腳手架都不需要自己操心的,畢竟架構組可能需要刷一波KPI了,因此現在的任務就是學習好React本身,而不是在腳手架直接跪了。
路由,第一步
既然使用了umi,那么就又回到了那個vueCli的年代了,簡簡單單一個demo,讓你找回熟悉的感覺:
export default {routes: [{ path: '/login', component: 'login' },{path: '/',component: '@/layouts/index',routes: [{ path: '/list', component: 'list' },{ path: '/admin', component: 'admin' },],}, ], }有沒有很熟系,沒錯和vue-router熟悉的味道,一模一樣。除了children換成了routes之外,基本就是react-router的配置了。那么我想要路由守衛的鉤子,有沒有?
- umi: 老子一早就知道你們這些逼想的是什么了。
沒錯,umi還真提供了類似守衛的路由監聽功能,在app.js中就約定了一個方法叫做onRouteChange,作用就是當路由切換的時候會觸發的一個鉤子函數,是不是熟悉的配方,熟悉的味道。
// 修改標題 export function onRouteChange({ matchedRoutes }) {if (matchedRoutes.length) {document.title = matchedRoutes[matchedRoutes.length - 1].route.title || '';} }同樣的,對于路由表來說,很多時候都需要做權限過濾,篩選出符合身份的路由,Vue有addRoutes,敢問足下何解啊?
- umi: 我也有,萬花筒寫輪眼。
可以看到,通過patchRoutes對routes進行表操作,也是可以達到addRoutes的相同效果。
export function patchRoutes({ routes }) {routes.unshift({path: '/test',exact: true,component: xxxxx,}); }當具備這些條件后,我立馬就是將Vue的一個路由權限校驗的demo拉進來了,我發現,竟然可以無痛的進行替換,只是書寫的地方不一樣,但是代碼改動大差不差,瞬間學習動力+1000有沒有。
狀態管理
先有Redux后有天,一手Dva賽神仙。狀態管理一直是React頭痛的一個問題,因為有太多的解決方法,如redux全家桶,Mobx等等現今大量使用的依賴庫,無疑學習成本很大,也是螞蟻大佬開源的dva整合大大減少了開發者的配置壓力,而不需要進行redux和saga的一些配置和結構分層。且使用成本上來說,如果你使用過vuex,基本算是一個無縫對接的狀態。
通過下面的一個Dva Model可以看出,是不是非常像一個Vuex的Modules。對于使用Vuex熟練的我來說,上手Dva真的只是一杯咖啡和一個下午茶的時間。
高階組件?
在React中,有一個非常有意思的東西,被稱之為HOC,可以將其理解為一個嵌套層,在Vue中我們對于邏輯復用我們可以用Mixin配合vue組件來進行一些封裝,來確保一個組件組件的多態,同樣的在React中也可以通過HOC來進行一個邏輯的多態重載,很多時候我們只需要將對應的render組件傳入。通過一個中間層的交換來實現的。那么我們就可以把HOC理解為一個閉包。通過將組件傳入后返回包裝好參數的組件,從而只需要去關注傳入組件后,在內部對數據進行處理后在給與傳入的組件。想深入HOC還是需要多實踐,多學習,了解函數式編程的思想
const ComponentWith = listComponent => listComponent插槽
在Vue中我們可以通過slot傳遞組件模板給組件,然后渲染。而React的話顯然是沒有插槽的概念,但其實你在組件內部中不論是寫的JSX DOM 都會被傳入到Props的children當中去,那么怎么渲染應該不用我說了吧。這就是一個類似于Vue的普通插槽的實現了。
但是往往我們可能會因為不同的插槽,做不同的事情,比如我有一個footer插槽用來改變模態框底部的內容,header用來改變頂部的內容。那么我們可以通過傳入一個對象的形式進行具名插槽的一個場景模擬。同樣的也會將其傳遞到一個Props當中去。是不是感覺非常有意思呢。
CSS解決方案
這個是我最頭痛的一見事情了,原諒帥氣的我吃不慣cssModule這碗軟飯, 如果你寫過了Vue,那么都知道在區分組件樣式的時候你可以在style標簽上聲明一個scoped來作為組件樣式隔離標注。最后打包時其實樣式都加入一個hash的唯一值,但是,當我寫React的時候卻沒有類似于這種方式的解決方案。大部分情況下還是使用的cssModule方案來進行的。雖然看上去是達到了樣式隔離,但是編程體驗相當不好,失去了原本CSS預編譯的優勢。
<style lang="sass" scoped> </style>后面也是使用了現在比較火熱的css in js的方案,styled-components是一個非常優質的方案,相對于CSSModule我還是更加喜歡它,能夠專注于寫樣式代碼。在很多的時候,我們不需要要過多的去組件進行隔離化。
styled-components也可以支持嵌套繼承等高級特性,但需要注意的是,內部嵌套的class, 并不會轉成隨機的類名,因此還是會有上下文沖突的形式存在。
在這里也列舉一些常見的方案:
- Bem CssName
- Style Component
- CssModule
- Css in js
后話
2020年,也算是成為了一個雙開的前端切圖仔了,隨著業務開發的時間占比量增加,可能在于某些方面來說需要多加強學習,在JavaScript規范愈演愈烈的情況下,2020年沒有過去2021年的feature實驗特性就已經出來了,所以對于新知識的了解依舊不能松懈,基礎知識是所有項目開發中的基石,所以我的年末也算是我今年定的最后一個計劃,深入基礎,不得不說紅寶書對我而言提升還是比較大的,在這里希望大家能夠成為更好的工程師。
如果文章對你有幫助,不妨點個贊吧。歡迎各位在評論區一起交流哦。
作者:wangly19鏈接:https://juejin.im/post/6882198352549642254
來源:掘金
總結
以上是生活随笔為你收集整理的react 动态路 嵌套动子路由_2020年,我是如何从一名Vueer转岗到React阵营的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: id3决策树 鸢尾花 python_C4
- 下一篇: access 导入 txt sql语句_