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