React 使用NPM创建项目

发布时间 2023-04-13 18:33:47作者: 風栖祈鸢

React 使用NPM创建项目

虽然研究 React 已经有一段时间,但之前写 Demo 都是直接新建文件夹然后在里面写 html 和 js,究其原因还是因为之前用不了 NPM。现在终于是把 NPM 的问题解决了(从 IDEA 上 copy 了个代理的地址),这下才能算是真正的 DEV 环境。

但有了 NPM 反而不知道怎么创建项目了。找了半天关于创建新项目的资料,才算搞明白,还有之前一直不知道怎么搞的 exportimport 用不了的问题在正常开发环境里也没有了,必须记录一下。

安装 NPM

首先是安装 NPM,不必多说,没有 NPM 搞前端就像没有 Maven 搞后端,跟个原始人一样。下载安装 Node.js 后,就自带了 NPM,在 cmd 中使用 npm --version 命令查看,出现版本号即为安装成功,环境变量也不用配,比安装 Java 都简单。有了 NPM 就可以创建项目了,使用的编辑器自然是 VSCode,好使。

创建 React 项目

在 VSC 中打开项目文件夹,然后在打开控制台终端(VSC 直接内置终端,当然直接开个 CMD 也行),输入

npx create-react-app my-react

此命令要求 npm5.2+,但现在装的应该都是最新版本吧。然后回车确认,就可以看到 NPM 正在下载包了:

img

时间可能有点小久,安装速度跟 NPM 设置的仓库地址有关系。安装完成后,终端会显示:

We suggest that you begin by typing:

  cd my-react
  npm start

Happy hacking!
PS E:\VueJS> 

可以看到它已经将后续的命令列出来了,即进入项目目录并使用 npm start 命令启动项目。如果此时按这个做,那么就会看到官方的项目模板:

img

然后在终端里可以看到启动相关的信息:

img

这样按照官方配置最简单的 React 项目久启动成功了。

纯净 React 项目

虽然按模板启动成功了,但可以看到项目路径非常复杂(稍微):

img

如果我们想要一个纯净的 React 项目写自己的代码怎么办呢?很简单,直接将 public 和 src 文件夹清空(里面的文件全删掉!),git 配置文件和 readme 也可以删掉,这样我们可以得到一个框架:

img

这样看起来就舒服了。但缺少了这么多文件,项目肯定是跑不了了。还需要将其中几个关键的骨架加回去:

index.html

在 public 文件夹下添加 index.html 文件,这个文件是项目启动后的入口,显示的就是这个页面的内容。文件内容就是经典的 HTML 框架,只需要有一个 root 节点就可以了:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Hello Qiyuanc</title>
</head>
<body>
    <div id="root"></div>
</body>
</html>

App.js

在 src 文件夹下添加 App.js 文件,这个文件顾名思义就是整个应用程序,后续就是对它的内容进行自定义,并将它渲染到 root 节点上就可以了:

import React, { Component } from 'react'
 
export default class App extends Component {
    render() {
        return (
            <div>
                Hello Qiyuanc!
            </div>
        )
    }
}

index.js

在 src 文件夹下添加 index.js 文件,这个文件就是负责将 App 渲染到 index 上,很简单:

import React from 'react'
import ReactDOM from 'react-dom'
import App from './App'
 
ReactDOM.render(<App/>, document.getElementById('root'))

创建了这三个关键文件,按 Ctrl+S 保存并刷新页面,就可以看到页面正常显示内容“Hello Qiyuanc!”了!

import 与 export

之前一直用原始方法创建 html 文件和 js 文件,importexport 这两个东西一直用不起来,查了一大堆资料都没解决,人都晕了。这次有了项目模板,可以再试一试了。

在 src 路径下创建 Child.js 文件:

export function Child(props) {
    return (
      <div>
        <div>{props.children[2]}</div>
        <div>{props.children[1]}</div>
        <div>{props.children[0]}</div>
      </div>
    )
  }

此处使用具名导出的方式,导出了 Child 组件。再创建 Parent.js 文件,导入 Child 组件:

import { Child } from './Child.js'

export function Parent() {
    return (
      <Child>
        {"这是0,应该排第一"}
        <>这是1,应该排第二</>
        <div>这是2,应该排第三</div>
      </Child>
    )
  }

对应 Child.js 里的具名导出,此处使用了具名导入(加花括号),这样就可以使用 Child 组件了(真正的组件化!)。

同时 Parent.js 里也导出了 Parent 组件,在 App.js 中用到:

import { Parent } from './Parent.js'

function App() {
  return (
    <Parent />
  );
}

export default App;

此处使用的是默认导出,对应的,在 index.js 中导入的方式为默认导入

import React from 'react'
import ReactDOM from 'react-dom'
// 默认导入
import App from './App'
 
ReactDOM.render(<App/>, document.getElementById('root'))

最后 index.js 中将 App 组件渲染到了 root 节点上,完成了页面的显示!!!

终于搞定这个 importexport 的问题了,舒服了。

最后再提两个点:

  1. 使用 npm start 开的项目,目前都是直接在终端里 Ctrl+C 停止的,不知道有没有别的办法;

  2. 控制台报了个警告,如下。

    Warning: ReactDOM.render is no longer supported in React 18. Use createRoot instead. Until you switch to the new API, your app will behave as if it's running React 17. Learn more: https://reactjs.org/link/switch-to-createroot

意思就是说 React 18 里已经不用 ReactDOM.render 方法啦,这下也算是与时代接轨了,类目。