成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

React入門系列 - 2 編寫第一個(gè)Hello world的React程序

PingCAP / 3307人閱讀

摘要:安裝必要的開(kāi)發(fā)包安裝兩個(gè)包安裝編寫一個(gè)的首先我們編寫一個(gè)的組件但是這僅僅是一個(gè)組件,我們需要一個(gè)頁(yè)面來(lái)容納的組件。到這一步,需要準(zhǔn)備的東西已經(jīng)完成了。

2.1 采用create react app 編寫

create-react-app項(xiàng)目 [[點(diǎn)擊前往Github]](https://github.com/facebook/c... 是facebook推出的入門初始化項(xiàng)目,適合新手第一次使用,無(wú)需進(jìn)行各種配置,完美的實(shí)現(xiàn)了開(kāi)箱即用理念。

2.1.1 建立項(xiàng)目
npx create-react-app my-app
cd my-app
npm start

npx命令是npm在5.x版本之后推出的一個(gè)增強(qiáng)功能,它幫助開(kāi)發(fā)者可以臨時(shí)下載項(xiàng)目進(jìn)行執(zhí)行之后,會(huì)自動(dòng)刪除這個(gè)臨時(shí)下載的項(xiàng)目。不會(huì)在全局項(xiàng)目中生成文件。

上面的命令,表示,下載create-react-app項(xiàng)目,并且運(yùn)行這個(gè)項(xiàng)目,在my-app目錄中創(chuàng)建新項(xiàng)目。

2.1.2 運(yùn)行項(xiàng)目

創(chuàng)建完成之后,進(jìn)入 my-app 目錄。執(zhí)行npm語(yǔ)句,進(jìn)行本地開(kāi)發(fā)預(yù)覽。

我們進(jìn)入這個(gè)創(chuàng)建好的文件夾my-app,執(zhí)行npm run start即可進(jìn)入本地開(kāi)發(fā)預(yù)覽了。

如圖所示,我們已經(jīng)在本地端口3000上運(yùn)行了這個(gè)程序??齑蜷_(kāi)你的瀏覽器查看一下吧。

2.2 手動(dòng)配置webpack編寫

這個(gè)章節(jié)有點(diǎn)超綱,有興趣的同學(xué)可以仔細(xì)閱讀一下。這一節(jié)是針對(duì)有興趣深入了解的同學(xué)的,如果你現(xiàn)在一下子還是無(wú)法理解這些知識(shí),建議后面再來(lái)回顧。

2.2.1 建立項(xiàng)目

我們首先創(chuàng)建一個(gè)webpack-app文件夾。然后使用VS Code打開(kāi)這個(gè)目錄。
使用Ctrl+~鍵打開(kāi)控制臺(tái),如果無(wú)法打開(kāi)說(shuō)明熱鍵已經(jīng)被占用了。點(diǎn)擊菜單的 查看 -> 終端

第一步先輸入npm init 建立前端項(xiàng)目的配置文件。

直接一路回車到結(jié)束。

2.2.2 安裝必要的開(kāi)發(fā)包

安裝react,react-dom兩個(gè)包

npm install --save-dev react react-dom

安裝webpack

npm install --save-dev webpack-cli webpack webpack-dev-server
2.2.3 編寫一個(gè)react的hello world

首先我們編寫一個(gè)HelloWorld的React組件

import React, { PureComponent } from "react"

export default class index extends PureComponent {
  render() {
    return (
      
Hello world React!
) } }

但是這僅僅是一個(gè)組件,我們需要一個(gè)HTML頁(yè)面來(lái)容納React的組件。




    
    
    
    Helloworld React


    

到這一步,React需要準(zhǔn)備的東西已經(jīng)完成了。

我們需要來(lái)編寫webpack對(duì)這個(gè)項(xiàng)目進(jìn)行打包,而webpack對(duì)開(kāi)發(fā)提供的DevServer的支持,讓我們來(lái)看一看,到底怎么做的。

我們?cè)陧?xiàng)目根目錄中創(chuàng)建一個(gè)名為"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é)點(diǎn)加入一個(gè)新的命令。

  "scripts": {
    "test": "echo "Error: no test specified" && exit 1",
    "dev": "webpack-dev-server"
  },

我們?cè)诮K端運(yùn)行npm run dev之后,你將會(huì)在控制臺(tái)中看到如下內(nèi)容。

webpack編譯之后告訴我們,它無(wú)法識(shí)別JSX格式。這個(gè)問(wèn)題就延伸出了,我們?cè)撊绾螌?duì)現(xiàn)代化的前端進(jìn)行配置。

現(xiàn)在對(duì)于前端代碼的轉(zhuǎn)換,通常采用的是babel轉(zhuǎn)譯。我們來(lái)看看編譯react需要哪些插件。點(diǎn)此查看babel如何配置webpack

首先,我們需要安裝babel,在終端輸入npm install --save-dev babel-loader @babel/core @babel/preset-env @babel/preset-react

我們修改webpack.config.js文件,讓他看起來(lái)像這樣

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文件,這個(gè)文件是用于配置babel編譯的,在文件中輸入以下內(nèi)容。

{
    "presets": ["@babel/preset-env","@babel/preset-react"]
}

不知道你是否注意到了,我修改了entry入口文件。因?yàn)閮H僅一個(gè)React組件并無(wú)法正常運(yùn)行,我們需要告知React框架,我們將組件注入在哪個(gè)DOM下,這個(gè)文件可以配置全局的Store、路由、全局的設(shè)定等。我們?cè)?b>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"));

代碼非常的簡(jiǎn)單,就是調(diào)用ReactDOM將React組件渲染到了id為app的節(jié)點(diǎn)下。

OK,現(xiàn)在我們?cè)俅芜\(yùn)行npm run dev,你將會(huì)看到webpack編譯成功的提示,我們現(xiàn)在打開(kāi)瀏覽器,輸入http://localhost:3000,你將會(huì)看到運(yùn)行編譯成功的網(wǎng)頁(yè)。

2.2.4 webpack加入HMR支持(熱更新)

大家有沒(méi)有發(fā)現(xiàn),我們現(xiàn)在這個(gè)項(xiàng)目修改了之后,是需要刷新整個(gè)頁(yè)面的。并沒(méi)有那種很高端很大氣的動(dòng)態(tài)刷新?

現(xiàn)在我們就將熱更新加入我們的項(xiàng)目中。

我們將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()
    ]
}

注意到了么,我們新增了NamedModulesPluginHotModuleReplacementPlugin兩個(gè)插件。還在devServer節(jié)點(diǎn)中加入了hot:true,并且追加了output節(jié)點(diǎn)。

然后,我們將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()
}

我們?cè)俅问褂?b>npm run dev運(yùn)行項(xiàng)目,然后修改index.js文件中的字符串,你會(huì)發(fā)現(xiàn),現(xiàn)在是無(wú)刷新更新頁(yè)面內(nèi)容了。

2.2.5 webpack優(yōu)化打包速度

我們?cè)?b>package.json的scripts節(jié)點(diǎn)中加入一條新語(yǔ)句"webpack":"webpack",然后來(lái)看一看現(xiàn)在項(xiàng)目默認(rèn)的打包速度是多少時(shí)間。

耗時(shí):2211ms

2.2.5.1 babel緩存

我們修改webpack.config.js文件中的babel配置項(xiàng)

 module: {
        rules: [{
            test: /.js$/,
            exclude: /node_modules/,
            loader: "babel-loader?cacheDirectory=true"
        }]
    },

babel-loader后面加入了cacheDirectory=true,再次執(zhí)行編譯,第一次你會(huì)發(fā)現(xiàn)速度并沒(méi)有優(yōu)化,這是因?yàn)檫€沒(méi)有建立緩存文件,但是第二次速度就提升了20%。

耗時(shí):1644ms (-500ms)

其他的包括抽取公共組件,加入hash等等策略我們以后再細(xì)聊。

源碼下載地址:https://github.com/yodfz/learn-webpack-react-config

原文地址:https://www.yodfz.com/detail/...

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/100885.html

相關(guān)文章

  • React入門系列 - 3 state與props

    摘要:而主要被設(shè)計(jì)用于維持組件內(nèi)部私有狀態(tài)。初始化初始化需要在中進(jìn)行。對(duì)于的定義為請(qǐng)求修改某個(gè)數(shù)據(jù),而的實(shí)現(xiàn)則是將對(duì)變量的修改放入一個(gè)修改隊(duì)列中,在一個(gè)循環(huán)之后進(jìn)行批量更新結(jié)果深入點(diǎn)涉及的更新機(jī)制。推出了與版本之后推出來(lái)的就是為了解決這些問(wèn)題的。 3.1 什么是state 我們要認(rèn)識(shí)到,React中的組件其實(shí)是一個(gè)函數(shù),所以state是函數(shù)內(nèi)部的私有變量,外部其他組件或者方法都是無(wú)法直接訪問(wèn)...

    henry14 評(píng)論0 收藏0
  • 【全棧React2天: 什么是 JSX?

    摘要:代表基本上是常規(guī)。第次更新,在年完成。幾乎完全支持所有主要的瀏覽器。但這將是一段時(shí)間,直到較舊版本的瀏覽器逐步停止使用。這意味著將轉(zhuǎn)換為。在組件的情況下,寫入的將如下所示在我們?cè)诘谝粋€(gè)作出反應(yīng)組件使用的語(yǔ)法是語(yǔ)法。 本文轉(zhuǎn)載自:眾成翻譯譯者:iOSDevLog鏈接:http://www.zcfy.cc/article/3797原文:https://www.fullstackreact....

    Eirunye 評(píng)論0 收藏0
  • 【全棧React1天: 什么是 React?

    摘要:本文轉(zhuǎn)載自眾成翻譯譯者鏈接原文今天,我們從一開(kāi)始就開(kāi)始。讓我們看看是什么,是什么讓運(yùn)轉(zhuǎn)起來(lái)。什么是是一個(gè)用于構(gòu)建用戶界面的庫(kù)。它是應(yīng)用程序的視圖層。所有應(yīng)用程序的核心是組件。組件是可組合的。虛擬完全存在于內(nèi)存中,并且是網(wǎng)絡(luò)瀏覽器的的表示。 本文轉(zhuǎn)載自:眾成翻譯譯者:iOSDevLog鏈接:http://www.zcfy.cc/article/3765原文:https://www.ful...

    ralap 評(píng)論0 收藏0
  • ReactJs入門教程

    摘要:組件關(guān)注的只應(yīng)該是狀態(tài),不同的狀態(tài)呈現(xiàn)不同的表現(xiàn)形式。組件一切都是組件倡導(dǎo)開(kāi)發(fā)者將切分成一個(gè)個(gè)組件從而達(dá)到松耦合及重用的目的。只不過(guò)的命名是進(jìn)入狀態(tài)之前跟進(jìn)入狀態(tài)之后。 前端已不止于前端-ReactJs初體驗(yàn) 原文寫于 2015-04-15 https://github.com/kuitos/kuitos.github.io/issues/21 要說(shuō)2015年前端屆最備受矚目的技術(shù)是啥...

    bingo 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<