从零开始的 React 第一部分

2025-06-09

从零开始的 React 第一部分

在本系列中,我们将了解 React、Webpack、Babel 和 Redux。作为本系列的第一部分,我们将从基础设置开始。让我们开始吧!

先决条件

在本指南中,我们将使用 npm 安装所有依赖项并启动项目。
因此,请确保您的计算机上已安装 npm!

基本设置

首先我们创建一个文件夹来存储我们的项目并进入其中初始化 npm:

$ mkdir getting-started-react
$ cd ./getting-started-react
$ npm init -y

现在我们要添加一些依赖项和一个名为src的新文件夹:

$ mkdir src
$ npm i react react-dom

在 src 目录中,我们需要创建一个名为index.js的文件,其内容如下:

import React, { StrictMode } from 'react';
import ReactDOM from 'react-dom';

const App = () => {
  return <div>Hello World!</div>;
};

ReactDOM.render(
  <StrictMode>
    <App />
  </StrictMode>,
  document.querySelector('#root'),
);

函数App返回一个包含内容Hello World 的div 。
之后,我们调用ReactDOM的 render 方法将 div 插入到 HTML 文档中。该 div 将被插入到 id 为root
的 HTML 元素中

为了使上述代码正常工作,我们需要创建一个这样的 HTML 文档。
因此,让我们创建一个名为index.html的文件,其内容如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Getting Started: React</title>
</head>
<body>
    <noscript>You need to enable JavaScript to run this app!</noscript>
    <div id="root"></div>
</body>
</html>

在此文件中,您可以看到 id 为root 的HTML 元素

Webpack 和 Babel

下一步是设置我们的开发服务器并打包文件,这样我们才能真正看到我们刚刚创建的内容。
为此,我们需要在项目中添加一些依赖项并创建一个新文件夹:

$ mkdir webpack
$ npm i webpack webpack-cli
$ npm i -D @babel/core babel-loader @babel/preset-env @babel/preset-react @babel/plugin-transform-runtime babel-plugin-transform-class-properties html-webpack-plugin webpack-dev-server

我们到底在这里安装了什么?这里只是个小概述,更多信息请点击链接:

现在我们已经安装了所有依赖项,是时候配置webpackbabelwebpack-dev-server 了
首先,我们在根目录中创建一个名为.babelrc的新文件,并配置以下内容:

{
  "presets": 
  [
    "@babel/preset-env",
    "@babel/preset-react"
  ],
  "plugins": [
    "babel-plugin-transform-class-properties",
    ["@babel/plugin-transform-runtime", {
      "regenerator": true
    }]
  ]
}

通过这种方式,我们配置了 babel 应该使用的预设和插件。

之后,我们创建 webpack 配置。为此,我们需要在 webpack 目录中创建一个名为webpack.config.js
的新文件。 配置如下:

const path = require('path');
const HtmlWebPackPlugin = require('html-webpack-plugin');

const baseURL = path.resolve(__dirname, '..');

module.exports = {
  entry: path.resolve(baseURL, 'src', 'index.js'),
  module: {
    rules: [
      {
        test: /\.js$/,
        exclude: /node_modules/,
        loader: "babel-loader",
      }
    ]
  },
  plugins: [
    new HtmlWebPackPlugin({
      template: `${baseURL}/src/index.html`,
      filename: './index.html',
      inject: 'body',
    })
  ]
};

我们在 webpack 配置中添加了babel-loader
,并配置了 HtmlWebPackPlugin 来查找之前创建的 index.html 文件。 为此,我们使用path来随时获取正确的路径。

现在是时候启动 webpack-dev-server 了。为此,我们修改package.json中的脚本

  "scripts": {
    "start": "webpack-dev-server --mode development --open --config ./webpack/webpack.config.js",
    "build": "webpack --mode production --config ./webpack/webpack.config.js"
  },

如果您现在运行以下命令,浏览器窗口将打开并显示Hello World!

$ npm start

更多装载机

接下来,我们将在 webpack 配置中添加更多加载器。我们需要为样式表和资源文件(例如 PNG、JPG 文件)添加加载器。
首先,我们将必要的加载器作为依赖项添加到 package.json 文件中。

$ npm i -D sass sass-loader style-loader css-loader file-loader

在这个项目中,我选择使用 SASS 而不是 CSS,因此我们还需要安装 npm 包 sass。
接下来,我们安装所有必要的加载器,以便将 SASS 分解为 CSS,然后将其加载到 HTML 中。
要使用这些加载器,我们需要修改 webpack.config.js 文件,如下所示:

const path = require('path');
const HtmlWebPackPlugin = require('html-webpack-plugin');

const baseURL = path.resolve(__dirname, '..');

module.exports = {
  entry: path.resolve(baseURL, 'src', 'index.js'),
  module: {
    rules: [
      {
        test: /\.js$/,
        exclude: /node_modules/,
        loader: "babel-loader",
      },
      {
        test: /\.s[ac]ss$/i,
        exclude: /node_modules/,
        use: [
          { loader: 'style-loader' },
          {
            loader: 'css-loader',
            options: {
              sourceMap: true,
            },
          },
          'sass-loader',
        ],
      },
      {
        test: /\.(png|jpe?g|gif)$/,
        loader: 'file-loader'
      }
    ]
  },
  plugins: [
    new HtmlWebPackPlugin({
      template: `${baseURL}/src/index.html`,
      filename: './index.html',
      inject: 'body',
    })
  ]
};

需要注意的是,style-loader 需要放在 use-array 的第一个位置,因为 webpack 会把它放在最后一个加载。
所以我们首先收集所有 sass 和 css 文件,然后通过 style-loader 将它们加载到DOM中。file
-loader 会将文件解析为可在 js 文件中使用的 URL。

样式和资产

最后,同样重要的是,我们将在项目中添加一个 scss 文件和一个图片,以检查加载器是否按预期工作。
为此,我们在 src 文件夹中创建一个名为index.scss的文件,并添加以下内容:

body {
  background-color: red;
}

要使用此文件,我们只需将以下行添加到index.js的导入语句中:

import './index.scss';

如果您现在启动开发服务器,我们的项目应该具有红色背景颜色。

接下来,我们将在 src 文件夹中添加一个名为assets的新子文件夹。
只需在 assets 文件夹中放入一些随机图像即可。
要显示此图像,我们需要像这样修改 index.js:

import React, { StrictMode } from 'react';
import ReactDOM from 'react-dom';
import './index.scss';
import img from './assets/your-image-name.png';

const App = () => {
  return (
    <div>
      <img src={img} />
      <div>Hello World!</div>
    </div>
  );
};

ReactDOM.render(
  <StrictMode>
    <App/>
  </StrictMode>,
  document.querySelector('#root'),
);

我们在文件顶部导入图片,然后将其用作 HTML-img-tag 中的 src-attribute。如果你通过npm start
重启 webpack-dev-server ,你应该就能在 assets 文件夹中看到你放入的图片了。

结论

至此,本系列的第一部分就完成了。我们搭建了一个基本的 React 应用,使用 webpack 作为打包工具,并使用 babel 实现向后兼容。
我们配置了 webpack 以接受 SCSS、HTML、JavaScript 和图片文件。
此外,我们还添加了webpack-dev-server作为开发服务器,以便在浏览器中快速查看修改的效果。

在下一部分中,我们开始使用 React 创建一个真实的应用程序。

该系列文章的所有代码都可以在这个GitHub 存储库中找到。

鏂囩珷鏉ユ簮锛�https://dev.to/klamserdev/react-from-scratch-part-1-3lmn
PREV
理解 JavaScript Promise👩‍💻👨‍💻
NEXT
在没有导师的情况下,我很难学会编程,这些建议帮助我学习编程