摘要:安裝必要的開發包安裝兩個包安裝編寫一個的首先我們編寫一個的組件但是這僅僅是一個組件,我們需要一個頁面來容納的組件。到這一步,需要準備的東西已經完成了。
2.1 采用create react app 編寫
create-react-app項目 [[點擊前往Github]](https://github.com/facebook/c... 是facebook推出的入門初始化項目,適合新手第一次使用,無需進行各種配置,完美的實現了開箱即用理念。
2.1.1 建立項目npx create-react-app my-app cd my-app npm start
npx命令是npm在5.x版本之后推出的一個增強功能,它幫助開發者可以臨時下載項目進行執行之后,會自動刪除這個臨時下載的項目。不會在全局項目中生成文件。
上面的命令,表示,下載create-react-app項目,并且運行這個項目,在my-app目錄中創建新項目。
2.1.2 運行項目創建完成之后,進入 my-app 目錄。執行npm語句,進行本地開發預覽。
我們進入這個創建好的文件夾my-app,執行npm run start即可進入本地開發預覽了。
如圖所示,我們已經在本地端口3000上運行了這個程序。快打開你的瀏覽器查看一下吧。
2.2 手動配置webpack編寫這個章節有點超綱,有興趣的同學可以仔細閱讀一下。這一節是針對有興趣深入了解的同學的,如果你現在一下子還是無法理解這些知識,建議后面再來回顧。
2.2.1 建立項目我們首先創建一個webpack-app文件夾。然后使用VS Code打開這個目錄。
使用Ctrl+~鍵打開控制臺,如果無法打開說明熱鍵已經被占用了。點擊菜單的 查看 -> 終端。
第一步先輸入npm init 建立前端項目的配置文件。
直接一路回車到結束。
2.2.2 安裝必要的開發包安裝react,react-dom兩個包
npm install --save-dev react react-dom
安裝webpack
npm install --save-dev webpack-cli webpack webpack-dev-server2.2.3 編寫一個react的hello world
首先我們編寫一個HelloWorld的React組件
import React, { PureComponent } from "react" export default class index extends PureComponent { render() { return (Hello world React!) } }
但是這僅僅是一個組件,我們需要一個HTML頁面來容納React的組件。
Helloworld React
到這一步,React需要準備的東西已經完成了。
我們需要來編寫webpack對這個項目進行打包,而webpack對開發提供的DevServer的支持,讓我們來看一看,到底怎么做的。
我們在項目根目錄中創建一個名為"webpack.config.js"的文件。
const path = require("path") module.exports = { mode:"development", entry: "./src/index.js", context: __dirname, target: "web", devServer: { proxy: {}, contentBase: path.join(__dirname, "public"), historyApiFallback: true, hot: true, noInfo: true, port: 3000 } }
配置完webpack.config.js文件之后,我們將在packageInfo.json中的scripts節點加入一個新的命令。
"scripts": { "test": "echo "Error: no test specified" && exit 1", "dev": "webpack-dev-server" },
我們在終端運行npm run dev之后,你將會在控制臺中看到如下內容。
webpack編譯之后告訴我們,它無法識別JSX格式。這個問題就延伸出了,我們該如何對現代化的前端進行配置。
現在對于前端代碼的轉換,通常采用的是babel轉譯。我們來看看編譯react需要哪些插件。點此查看babel如何配置webpack
首先,我們需要安裝babel,在終端輸入npm install --save-dev babel-loader @babel/core @babel/preset-env @babel/preset-react
我們修改webpack.config.js文件,讓他看起來像這樣
const path = require("path") const HtmlWebpackPlugin = require("html-webpack-plugin"); module.exports = { mode: "development", entry: "./src/entry.js", context: __dirname, target: "web", devServer: { proxy: {}, contentBase: path.join(__dirname, "public"), port: 3000 }, module: { rules: [{ test: /.js$/, exclude: /node_modules/, loader: "babel-loader" }] }, plugins: [ new HtmlWebpackPlugin( Object.assign({}, { inject: true, template: __dirname + "/public/index.html", }) ), ] }
在根目錄創建.bablerc文件,這個文件是用于配置babel編譯的,在文件中輸入以下內容。
{ "presets": ["@babel/preset-env","@babel/preset-react"] }
不知道你是否注意到了,我修改了entry入口文件。因為僅僅一個React組件并無法正常運行,我們需要告知React框架,我們將組件注入在哪個DOM下,這個文件可以配置全局的Store、路由、全局的設定等。我們在src目錄下創建entry.js,下面是entry.js文件的源碼。
import React from "react"; import ReactDOM from "react-dom"; import Index from "./index"; ReactDOM.render(, document.querySelector("#app"));
代碼非常的簡單,就是調用ReactDOM將React組件渲染到了id為app的節點下。
OK,現在我們再次運行npm run dev,你將會看到webpack編譯成功的提示,我們現在打開瀏覽器,輸入http://localhost:3000,你將會看到運行編譯成功的網頁。
2.2.4 webpack加入HMR支持(熱更新)大家有沒有發現,我們現在這個項目修改了之后,是需要刷新整個頁面的。并沒有那種很高端很大氣的動態刷新?
現在我們就將熱更新加入我們的項目中。
我們將webpack.config.js文件做如下修改
const path = require("path") const HtmlWebpackPlugin = require("html-webpack-plugin"); const webpack = require("webpack") module.exports = { mode: "development", entry: [ "webpack/hot/dev-server", "./src/entry.js" ], output: { filename: "[name].bundle.js", path: path.resolve(__dirname, "dist") }, context: __dirname, target: "web", devServer: { proxy: {}, contentBase: path.join(__dirname, "public"), hot: true, port: 3000 }, module: { rules: [{ test: /.js$/, exclude: /node_modules/, loader: "babel-loader" }] }, plugins: [ new HtmlWebpackPlugin( Object.assign({}, { inject: true, template: __dirname + "/public/index.html", }) ), new webpack.NamedModulesPlugin(), new webpack.HotModuleReplacementPlugin() ] }
注意到了么,我們新增了NamedModulesPlugin和HotModuleReplacementPlugin兩個插件。還在devServer節點中加入了hot:true,并且追加了output節點。
然后,我們將entry.js文件修改為這樣:
import React from "react"; import ReactDOM from "react-dom"; import Index from "./index"; ReactDOM.render( < Index / > , document.querySelector("#app")); if (module.hot) { module.hot.accept() }
我們再次使用npm run dev運行項目,然后修改index.js文件中的字符串,你會發現,現在是無刷新更新頁面內容了。
2.2.5 webpack優化打包速度我們在package.json的scripts節點中加入一條新語句"webpack":"webpack",然后來看一看現在項目默認的打包速度是多少時間。
耗時:2211ms
我們修改webpack.config.js文件中的babel配置項
module: { rules: [{ test: /.js$/, exclude: /node_modules/, loader: "babel-loader?cacheDirectory=true" }] },
在babel-loader后面加入了cacheDirectory=true,再次執行編譯,第一次你會發現速度并沒有優化,這是因為還沒有建立緩存文件,但是第二次速度就提升了20%。
耗時:1644ms (-500ms)
其他的包括抽取公共組件,加入hash等等策略我們以后再細聊。
源碼下載地址:https://github.com/yodfz/learn-webpack-react-config
原文地址:https://www.yodfz.com/detail/...
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/100885.html
摘要:而主要被設計用于維持組件內部私有狀態。初始化初始化需要在中進行。對于的定義為請求修改某個數據,而的實現則是將對變量的修改放入一個修改隊列中,在一個循環之后進行批量更新結果深入點涉及的更新機制。推出了與版本之后推出來的就是為了解決這些問題的。 3.1 什么是state 我們要認識到,React中的組件其實是一個函數,所以state是函數內部的私有變量,外部其他組件或者方法都是無法直接訪問...
摘要:代表基本上是常規。第次更新,在年完成。幾乎完全支持所有主要的瀏覽器。但這將是一段時間,直到較舊版本的瀏覽器逐步停止使用。這意味著將轉換為。在組件的情況下,寫入的將如下所示在我們在第一個作出反應組件使用的語法是語法。 本文轉載自:眾成翻譯譯者:iOSDevLog鏈接:http://www.zcfy.cc/article/3797原文:https://www.fullstackreact....
摘要:本文轉載自眾成翻譯譯者鏈接原文今天,我們從一開始就開始。讓我們看看是什么,是什么讓運轉起來。什么是是一個用于構建用戶界面的庫。它是應用程序的視圖層。所有應用程序的核心是組件。組件是可組合的。虛擬完全存在于內存中,并且是網絡瀏覽器的的表示。 本文轉載自:眾成翻譯譯者:iOSDevLog鏈接:http://www.zcfy.cc/article/3765原文:https://www.ful...
摘要:組件關注的只應該是狀態,不同的狀態呈現不同的表現形式。組件一切都是組件倡導開發者將切分成一個個組件從而達到松耦合及重用的目的。只不過的命名是進入狀態之前跟進入狀態之后。 前端已不止于前端-ReactJs初體驗 原文寫于 2015-04-15 https://github.com/kuitos/kuitos.github.io/issues/21 要說2015年前端屆最備受矚目的技術是啥...
閱讀 3878·2021-09-27 13:36
閱讀 4554·2021-09-22 15:12
閱讀 3063·2021-09-13 10:29
閱讀 1826·2021-09-10 10:50
閱讀 2360·2021-09-03 10:43
閱讀 518·2019-08-29 17:10
閱讀 442·2019-08-26 13:52
閱讀 3250·2019-08-23 14:37