最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

react項(xiàng)目自行配置熱更新的實(shí)現(xiàn)

 更新時(shí)間:2023年11月27日 09:54:13   作者:程序員超超  
本文主要介紹了react項(xiàng)目自行配置熱更新的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

react項(xiàng)目自己配置熱更新的話(huà)需要安裝兩個(gè)包@pmmmwh/react-refresh-webpack-pluginreact-refresh,這個(gè)是官方推薦的做法。下面給出一個(gè)完整demo

App.js

import React, { useState } from "react";

function App() {
  const [count, setCount] = useState(0);
  return (
    <div>
      <h1 onClick={() => setCount(count + 1)}>{count}</h1>
      <div>1</div>
    </div>
  );
}

export default App;

index.html

<!DOCTYPE html>
<html lang="zn">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>React App</title>
  </head>
  <body>
    <div id="app"></div>
  </body>
</html>

index.js

import React from "react";
import App from "./App";
import { createRoot } from "react-dom/client";
const root = createRoot(document.getElementById("app"));

root.render(<App></App>);

webpack.config.js

const ReactRefreshPlugin = require("@pmmmwh/react-refresh-webpack-plugin");
const HtmlWebpackPlugin = require("html-webpack-plugin");

module.exports = {
  entry: "./index.js",
  mode: "development",
  devServer: {
    static: "./dist",
    hot: true,
  },
  module: {
    rules: [
      {
        test: /\.js$/,
        exclude: /node_modules/,
        loader: "babel-loader",
        options: {
          presets: ["@babel/env", "@babel/preset-react"],
          plugins: [require.resolve("react-refresh/babel")], // react-refresh 添加
        },
      },
    ],
  },
  plugins: [
    new ReactRefreshPlugin(),
    new HtmlWebpackPlugin({
      template: "./index.html",
    }),
  ],
};

package.json

{
  "name": "react-hmr",
  "version": "0.1.0",
  "private": true,
  "scripts": {
    "start": "webpack-dev-server"
  },
  "dependencies": {
    "@babel/core": "^7.23.3",
    "@babel/preset-env": "^7.23.3",
    "@babel/preset-react": "^7.23.3",
    "@pmmmwh/react-refresh-webpack-plugin": "^0.5.11",
    "babel-loader": "^9.1.3",
    "html-webpack-plugin": "^5.5.3",
    "react": "^18.2.0",
    "react-dom": "^18.2.0",
    "react-refresh": "^0.14.0",
    "webpack": "^5.89.0",
    "webpack-cli": "^5.1.4",
    "webpack-dev-server": "^4.15.1"
  }
}

之后執(zhí)行npm start,大家自行測(cè)試

這里說(shuō)一下注意點(diǎn),每個(gè)組件只能使用一個(gè)export,如果有多個(gè),熱更新會(huì)失效,這點(diǎn)很重要。例如我們修改App.js

App.js

import React, { useState } from "react";

export const delay = () => {}

function App() {
  const [count, setCount] = useState(0);
  return (
    <div>
      <h1 onClick={() => setCount(count + 1)}>{count}</h1>
      <div>1</div>
    </div>
  );
}

export default App;

這里多加了一個(gè)export const delay,大家可以試一下。這個(gè)時(shí)候熱更新就不起作用了。

這里還解釋一下為什么不用webpack的hmr,webpack不是自帶hmr么,為什么還安裝其他的包呢?這個(gè)問(wèn)題大家可以看一下我這篇文章

還有一種方式是使用react-hot-loader,不過(guò)react-hot-loader已經(jīng)不推薦使用了。

我們這里基于上面的代碼進(jìn)行改編,這里react和react-dom需要降級(jí),把18版本降級(jí)成17版本。不然無(wú)法使用。先執(zhí)行

npm i react@17.0.0 react-dom@17.0.0
npm i react-hot-loader

修改webpack.config.js配置

const HtmlWebpackPlugin = require("html-webpack-plugin");

module.exports = {
  entry: "./index.js",
  mode: "development",
  devServer: {
    static: "./dist",
    hot: true,
  },
  module: {
    rules: [
      {
        test: /\.js$/,
        exclude: /node_modules/,
        loader: "babel-loader",
        options: {
          presets: ["@babel/env", "@babel/preset-react"],
          plugins: ["react-hot-loader/babel"],
        },
      },
    ],
  },
  plugins: [
    new HtmlWebpackPlugin({
      template: "./index.html",
    }),
  ],
};

修改index.js

import { hot } from "react-hot-loader/root";
import React from "react";
import App from "./App";
import { render } from "react-dom";

const HotComponent = hot(App);

render(<HotComponent />, document.getElementById("app"));

if (module.hot) {
  module.hot.accept("./App", () => {
    render(<HotComponent />, document.getElementById("app"));
  });
}

到此這篇關(guān)于react項(xiàng)目自行配置熱更新的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)react自行配置熱更新內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • React之防止按鈕多次點(diǎn)擊事件?重復(fù)提交

    React之防止按鈕多次點(diǎn)擊事件?重復(fù)提交

    這篇文章主要介紹了React之防止按鈕多次點(diǎn)擊事件?重復(fù)提交問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • 使用React?Hooks模擬生命周期的實(shí)現(xiàn)方法

    使用React?Hooks模擬生命周期的實(shí)現(xiàn)方法

    這篇文章主要介紹了使用React?Hooks模擬生命周期,本文舉例說(shuō)明如何使用 hooks 來(lái)模擬比較常見(jiàn)的 class 組件生命周期,需要的朋友可以參考下
    2023-02-02
  • 解析React?ref?命令代替父子組件的數(shù)據(jù)傳遞問(wèn)題

    解析React?ref?命令代替父子組件的數(shù)據(jù)傳遞問(wèn)題

    這篇文章主要介紹了React?-?ref?命令為什么代替父子組件的數(shù)據(jù)傳遞,使用?ref?之后,我們不需要再進(jìn)行頻繁的父子傳遞了,子組件也可以有自己的私有狀態(tài)并且不會(huì)影響信息的正常需求,這是為什么呢?因?yàn)槲覀兪褂昧?ref?命令的話(huà),ref是可以進(jìn)行狀態(tài)的傳輸
    2022-08-08
  • React Hooks使用常見(jiàn)的坑

    React Hooks使用常見(jiàn)的坑

    React Hooks 是 React 16.8 引入的新特性,允許我們?cè)诓皇褂?Class 的前提下使用 state 和其他特性。接下來(lái)通過(guò)本文給大家分享React Hooks使用避坑指南,一起學(xué)習(xí)下吧
    2021-06-06
  • React路由監(jiān)聽(tīng)/跳轉(zhuǎn)/守衛(wèi)的完整指南

    React路由監(jiān)聽(tīng)/跳轉(zhuǎn)/守衛(wèi)的完整指南

    React Router 是 React 單頁(yè)應(yīng)用的核心路由庫(kù),除了基礎(chǔ)的路由配置,日常開(kāi)發(fā)中還會(huì)高頻用到路由監(jiān)聽(tīng)、編程式跳轉(zhuǎn)、路由守衛(wèi)等進(jìn)階功能,本文從實(shí)戰(zhàn)角度拆解這三大核心能力,需要的朋友可以參考下
    2026-03-03
  • React簡(jiǎn)單介紹

    React簡(jiǎn)單介紹

    React 是一個(gè)用于構(gòu)建用戶(hù)界面的 JavaScript 庫(kù),主要用于構(gòu)建 UI,而不是一個(gè) MVC 框架,React 擁有較高的性能,代碼邏輯非常簡(jiǎn)單,越來(lái)越多的人已開(kāi)始關(guān)注和使用它
    2017-05-05
  • 淺談React組件之性能優(yōu)化

    淺談React組件之性能優(yōu)化

    這篇文章主要介紹了淺談React組件之性能優(yōu)化,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-03-03
  • react性能優(yōu)化useMemo與useCallback使用對(duì)比詳解

    react性能優(yōu)化useMemo與useCallback使用對(duì)比詳解

    這篇文章主要為大家介紹了react性能優(yōu)化useMemo與useCallback使用對(duì)比詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • 深入理解React與閉包的關(guān)系

    深入理解React與閉包的關(guān)系

    本文將深入探討React與閉包之間的關(guān)系,我們將首先介紹React和閉包的基本概念,然后詳細(xì)解釋React組件中如何使用閉包來(lái)處理狀態(tài)和作用域的問(wèn)題,希望通過(guò)本文的閱讀,你將對(duì)React中閉包的概念有更深入的理解,并能夠在開(kāi)發(fā)React應(yīng)用時(shí)更好地應(yīng)用閉包
    2023-07-07
  • react hooks入門(mén)詳細(xì)教程

    react hooks入門(mén)詳細(xì)教程

    這篇文章主要介紹了react hooks入門(mén)詳細(xì)教程,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04

最新評(píng)論

拉萨市| 西贡区| 桃江县| 西丰县| 德州市| 夏津县| 阿克| 竹溪县| 融水| 大冶市| 绍兴市| 葫芦岛市| 吉木萨尔县| 连城县| 湖口县| 黎川县| 新竹市| 怀仁县| 福贡县| 阿克陶县| 桐庐县| 玛沁县| 淮南市| 南和县| 盈江县| 济源市| 聊城市| 双辽市| 漳平市| 固始县| 大埔县| 贵阳市| 昌平区| 观塘区| 肥乡县| 白河县| 张家港市| 沂水县| 仁布县| 昌乐县| 友谊县|