成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

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

PingCAP / 3366人閱讀

摘要:安裝必要的開發(fā)包安裝兩個(gè)包安裝編寫一個(gè)的首先我們編寫一個(gè)的組件但是這僅僅是一個(gè)組件,我們需要一個(gè)頁面來容納的組件。到這一步,需要準(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)目,適合新手第一次使用,無需進(jìn)行各種配置,完美的實(shí)現(xiàn)了開箱即用理念。

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

npx命令是npm在5.x版本之后推出的一個(gè)增強(qiáng)功能,它幫助開發(fā)者可以臨時(shí)下載項(xiàng)目進(jìn)行執(zhí)行之后,會自動(dòng)刪除這個(gè)臨時(shí)下載的項(xiàng)目。不會在全局項(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語句,進(jìn)行本地開發(fā)預(yù)覽。

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

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

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

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

2.2.1 建立項(xiàng)目

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

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

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

2.2.2 安裝必要的開發(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頁面來容納React的組件。




    
    
    
    Helloworld React


    

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

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

我們在項(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"
  },

我們在終端運(yùn)行npm run dev之后,你將會在控制臺中看到如下內(nèi)容。

webpack編譯之后告訴我們,它無法識別JSX格式。這個(gè)問題就延伸出了,我們該如何對現(xiàn)代化的前端進(jìn)行配置。

現(xiàn)在對于前端代碼的轉(zhuǎn)換,通常采用的是babel轉(zhuǎn)譯。我們來看看編譯react需要哪些插件。點(diǎn)此查看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文件,這個(gè)文件是用于配置babel編譯的,在文件中輸入以下內(nèi)容。

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

不知道你是否注意到了,我修改了entry入口文件。因?yàn)閮H僅一個(gè)React組件并無法正常運(yùn)行,我們需要告知React框架,我們將組件注入在哪個(gè)DOM下,這個(gè)文件可以配置全局的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é)點(diǎn)下。

OK,現(xiàn)在我們再次運(yùn)行npm run dev,你將會看到webpack編譯成功的提示,我們現(xiàn)在打開瀏覽器,輸入http://localhost:3000,你將會看到運(yùn)行編譯成功的網(wǎng)頁。

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

大家有沒有發(fā)現(xiàn),我們現(xiàn)在這個(gè)項(xiàng)目修改了之后,是需要刷新整個(gè)頁面的。并沒有那種很高端很大氣的動(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()
}

我們再次使用npm run dev運(yùn)行項(xiàng)目,然后修改index.js文件中的字符串,你會發(fā)現(xiàn),現(xiàn)在是無刷新更新頁面內(nèi)容了。

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

我們在package.jsonscripts節(jié)點(diǎn)中加入一條新語句"webpack":"webpack",然后來看一看現(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í)行編譯,第一次你會發(fā)現(xiàn)速度并沒有優(yōu)化,這是因?yàn)檫€沒有建立緩存文件,但是第二次速度就提升了20%。

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

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

源碼下載地址: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://m.hztianpu.com/yun/100885.html

相關(guān)文章

  • React入門系列 - 3 state與props

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

    henry14 評論0 收藏0
  • 【全棧React2天: 什么是 JSX?

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

    Eirunye 評論0 收藏0
  • 【全棧React1天: 什么是 React?

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

    ralap 評論0 收藏0
  • ReactJs入門教程

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

    bingo 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<