Node.js並非一個JavaScript框架,Node.js是JavaScript運行時的運行環境,類比Java中的JVM。html
java的開端是什麼,無疑是JVM,自從有了JVM,java才能吹牛說本身是「一次編寫到處運行」,無論你是windows仍是linux,只要安裝了對應版本的JVM均可以運行.class文件。前端
一樣Node.js的做用和JVM的同樣同樣的,也是js的運行環境,不論是你是什麼操做系統,只要安裝對應版本的Node.js,那你就能夠用js來開發後臺程序。這具備劃時代的意義,意味着一直以來只能在瀏覽器上玩來玩去的js,能夠作後端開發了。vue
從有了Node.js後就催生出一大批用js作後臺開發的前端人員,這部分人員就是偏前端的「全棧程序員」。記住,Node.js是和JVM同等地位的js運行環境,打開了前端人員走向後端的道路。java
React設計思想及其獨特,屬於革命性創新,性能出衆,代碼邏輯卻很是簡單。react
庫(library):小而巧,庫只提供了特定的api。優勢是船小好調頭,能夠很方便的從一個庫切換到另外的庫,可是代碼幾乎不會改變。linux
框架(Framework):大而全,框架提供了一整套的解決方案。因此,若是在項目中間,想切換到另外的框架是比較困難的。webpack
和Angular1相比,React設計很優秀,一切基於JS而且實現了組件化開發的思想程序員
React提供了無縫轉到ReactNative上的開發體驗。web
+ 什麼是模塊化:是從代碼的角度來進行分析的;把一些可複用的代碼,抽離爲單個的模塊,便於項目的維護和開發。算法
+ 什麼是組件化:是用UI界面的角度來進行分析的;把一些可複用的UI元素,抽離爲單獨的組件,便於項目的維護和開發。
+ 組件化的好處:隨着項目規模的增大,手裏的組件愈來愈多,很方便就能夠把現有的組件,拼接成一個完整的頁面。
+ Vue是如何實現組件化的:經過.vue文件,來建立對應的組件:
+ template 結構 + script 行爲 + style 樣式
+ React是如何實現組件化的:React中有組件化的概念,可是並無像Vue這樣的組件模板文件;React中,一切都是以JS來表現的。所以要學習React,JS要合格,ES6和ES7(async和await)要會用
一、運行npm init -y快速初始化項目
二、在項目根目錄建立src源代碼目錄和dist產品目錄
三、使用cnpm安裝webpack,運行cnpm install webpack -D以及cnpm install webpack-cli -D
四、Webpack4.x提供了約定大於配置的概念,目的是爲了減小配置文件的體積;默認約定的 打包的入口是/src/index.js;打包的輸出文件是/dist/main.js
五、Webpack4.x 新增了mode選項(必填項),可選值爲development和production
六、爲了方便運行,配置實時打包編譯工具->webpack-dev-server。 cnpm install webpack-dev-server -D
七、Webpack-dev-server打包好的main.js是託管到了內存中,在項目根目錄的物理磁盤中看不到;可是咱們能夠認爲,在項目根目錄中,有一個看不見的mian.js
八、Webpack-dev-server打包後打開的首頁是項目根目錄,而不是src目錄下的index.html。 爲了讓打包編譯後的網頁自動打開index.html,就須要用到HtmlWebpackPlugin插件,來在項目根目錄下生成index.html。安裝並在webpack.config.js的module.exports中配置plugins。
配置babel的步驟
使用構造函數來建立組件,若是要接收外界傳遞的數據,須要在構造函數的參數列表中使用props來接收;必需要向外return一個合法的JSX的虛擬DOM。
//第一種建立組件的方式 function Hello(props) { //若是在一個組件中 return 一個 null。則表示此組件是空的,什麼都不會渲染 // return null //在組件中,必須返回一個合法的JSX虛擬DOM元素 return <div>這是 Hello 組件 --- {props.name} --- {props.age} --- {props.gender}</div> //不管是vue仍是React,組件中的props永遠都是隻讀的,不能被從新賦值 }
ReactDOM.render( <div> {/*直接把建立的組件名稱,以標籤的形式,丟到頁面上便可*/} <Hello name={dog.name} age={dog.age} gender={dog.gender}></Hello> </div> , document.getElementById('parent'))
一、 history:用來跳轉路由 路徑
2.、Match:匹配結果,若是匹配上就是對象,匹配不上就是null
三、Location:當前路徑 pathname當前路徑名
//打開webpack.config.js,並在導出的配置對象中,新增以下節點 resolve: { extensions: [ '.js', '.jsx', '.json' ]//表示這幾個文件的後綴名,能夠省略不寫(.js和.json是默認有的) }
//alias:別名;這裏設置別名是爲了讓後續引用的地方減小路徑的複雜度 alias: { '@': path.join(__dirname, './src') } }
一、若是一個組件須要本身的私有數據,則推薦使用:class建立的有狀態組件
二、若是一個組件不須要私有的數據,則推薦使用:無狀態組件
三、React官方:無狀態組件因爲沒有本身的state和聲明周期函數,因此運行效率會比有狀態組件稍微高一些
一、props中的數據都是外界傳遞過來的
二、state/data中的數據,都是組件私有的;(經過Ajax獲取回來的數據,通常都是私有數據)
三、 props中的數據都是隻讀的,不能從新賦值
四、state/data中的數據,都是可讀可寫的
一、history:用來跳轉路由 路徑
二、Match:匹配結果,若是匹配上就是對象,匹配不上就是null
三、Location:當前路徑 pathname當前路徑名
一、什麼叫 hash 地址,hash 地址就是指 # 號後面的 url
二、假若有一個 Link 標籤,點擊後跳轉到 /abc/def。
BrowserRouter: http://localhost:8080/abc/def HashRouter: [<u>http://localhost:8080/#/abc/def</u>](http://localhost:8080/#/abc/def)
緣由在於,若是是單純的靜態文件,假如路徑從 / 切換到 /a 後,此時刷新頁面,頁面將沒法正常訪問,須要在服務器端進行相關配置