react项目_如何从零开始创建React项目(三种方式)

在开发React项目前最关键的当然是项目的创建,现在的前端工程化使得前端项目的创建也变得越来越复杂,在这里介绍三种从零开始创建React项目的方式,分别是在浏览器中直接引入、使用官方脚手架create-react-app、使用Webpack创建。

浏览器中通过标签直接引入

React框架有两个核心的包,分别是react以及react-dom,如何想直接在浏览器中使用React,那么把这两个包直接引入就可以了。

<!-- 引入react -->
<script src="https://unpkg.com/react@16/umd/react.development.js" crossorigin></script>
<!-- 引入react-dom -->
<script src="https://unpkg.com/react-dom@16/umd/react-dom.development.js" crossorigin></script>

如果想要使用JSX语法,那么必须引入Babel。

<!-- 引入Babel,使浏览器可以识别JSX语法,如果不使用JSX语法,可以不引入 -->
<script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script>

接下来我会以一个完整的html示例来给大家展示,在刚开始学习React的时候可以使用这种方式。

首先创建一个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>React</title>
</head>
<body></body>
</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>React</title><!-- 引入react --><script src="https://unpkg.com/react@16/umd/react.development.js" crossorigin></script><!-- 引入react-dom --><script src="https://unpkg.com/react-dom@16/umd/react-dom.development.js" crossorigin></script><!-- 引入Babel,使浏览器可以识别JSX语法,如果不使用JSX语法,可以不引入 --><script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script>
</head><body></body></html>

在body标签中创建Dom结构以及script标签,这里因为引入了babel,所以script标签的type必须是"text/babel"。

<!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>React</title><!-- 引入react --><script src="https://unpkg.com/react@16/umd/react.development.js" crossorigin></script><!-- 引入react-dom --><script src="https://unpkg.com/react-dom@16/umd/react-dom.development.js" crossorigin></script><!-- 引入Babel,使浏览器可以识别JSX语法,如果不使用JSX语法,可以不引入 --><script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script>
</head><body><div id="app"></div><script type="text/babel">// 必须添加type="text/babel",否则不识别JSX语法</script>
</body></html>

然后在scirpt中写React代码

<!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>React</title><!-- 引入react --><script src="https://unpkg.com/react@16/umd/react.development.js" crossorigin></script><!-- 引入react-dom --><script src="https://unpkg.com/react-dom@16/umd/react-dom.development.js" crossorigin></script><!-- 引入Babel,使浏览器可以识别JSX语法,如果不使用JSX语法,可以不引入 --><script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script>
</head><body><div id="app"></div><script type="text/babel">// 必须添加type="text/babel",否则不识别JSX语法class App extends React.Component {render() {return(<div><h1>Hello World</h1></div>)}}ReactDOM.render(<App />, document.getElementById('app'))</script>
</body></html>

最后在浏览器中打开index.html,页面上会渲染出Hello World。

使用官方脚手架creact-react-app

这种方式其实比较简单,官方以及替我们封装好了需要的库,我们只要直接使用就可以来。
使用脚手架也有两种方式。
第一种是官方网站教程给出的方式,使用npx命令

npx create-react-app <项目名>

我们用这条命令来创建一个my-app的项目

npx create-react-app my-app

创建完成后会在当前目录下出现一个my-app的文件夹,进入my-app目录,运行npm run start

cd my-app
npm run start

然后就可以在浏览器中看到默认的页面
项目创建完成的页面结构如下

1001e10c99a7c30cf30dbe0d4b0e09af.png


create-react-app项目结构

这个结构还是比较清晰的,稍微有前端开发经验的程序员应该都可以看懂,初学者可以直接在App.js中写React代码。

接下来介绍第二种使用脚手架的方式,其实相差不大,这是方式是使用npm命令,和vue-cli非常类似。
首先通过npm全局安装create-react-app

npm install -g create-react-app

mac用户如果安装不成功可以加上sudo命令

sudo npm install -g create-react-app

然后使用create-react-app命令来创建项目

create-react-app <项目名>

创建my-app项目

create-react-app my-app

创建出的项目和第一种方式创建的项目一致。

使用webpack、babel、react来创建React项目

初始化项目

首先第一步我们先创建一个名字是my-app的文件夹

mkdir my-app

进入该目录

cd my-app

然后在my-app目录下创建src文件夹用来存放React代码

mkdir src

使用npm命令初始化项目

npm init -y

此时的项目结构如下

14704eda07605b62a7b32673bfe23904.png


项目结构

安装webpack

首先安装webpack和webpack-cli,webpack-cli包含了webpack的众多指令,所以需要安装。

npm install webpack webpack-cli --save-dev

注意: 在这里简单介绍一下npm install命令的参数 --save-dev 和 --save的区别,一般来说使用--save-dev参数安装的npm包在最终打包的时候不会被包括到源码里去,所以类似bebel和webpack这种进行项目工程构建或者代码编译的库应该用--save-dev来安装,而--save则是安装代码运行必须的库,比如react等。

安装Babel

进行前端工程化的时候大多数前端工程师都会用到babel,最开始的babel是用来把es6的代码编译成es5的代码,让前端开发者在使用新的特性的同时不必考虑浏览器兼容问题。虽然现在的主流浏览器已经支持大部分的es6的新特性,但是因为JavaScript每年都会有一些新的特性被提出,而浏览器不一定能在特性推出后及时实现,或者是有一些还在实验中的语法。使用来babel后就可以忽略这些问题,可以放心使用新的JavaScript语法,甚至是实验性的语法。

接下来我们会安装这几个包:

  • @babel/core
  • @babel/preset-env
  • @babel/preset-react
  • babel-loader
    很明显@babel/core是babel的核心库,必须安装,@babel/preset-env帮助我们把es6的语法编译成es5的语法,@babel/preset-react则是帮我们识别JSX语法,babel-loader则是帮我们把不同的文件转化成我们想要的格式输出,或者说就是将我们的经过babel处理后的代码进行输出成浏览器可以识别的文件。

安装指令

npm install @babel/core babel-loader @babel/preset-env @babel/preset-react --save-dev

在安装成功后必须进行babel的配置,在根目录my-app建立.babelrc文件,然后写入以下配置

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

然后我们需要做一些webpack的配置,在根目录my-app建立webpack.config.js文件,然后写入以下配置

const path = require('path');module.exports = {entry: './src/main.js',output: {filename: 'bundle.js',path: path.resolve(__dirname, 'dist')},module: {rules: [{test: /.js$/,exclude: /node_modules/,use: {loader: "babel-loader"}}]}
};

在babel配置完之后,我们需要在./src目录下新建三个文件index.html、main.js、App.js,此时我们的项目的所有文件都创建完毕,项目结构应该如下所示:

ae0971b507b75f6b3616a4e6eec70019.png


项目结构

接下来因为webpack默认只能对.js文件进行最终打包,而我们的项目是有.html文件的,所以我们必须下载和html有关的loader和插件来对html进行处理。

处理html

安装html-webpack-plugin和html-loader

npm install html-webpack-plugin html-loader --save-dev

在安装完成之后我们需要在webpack.config.js中进行配置
webpack.config.js文件内容如下

const path = require('path');
const HtmlWebPackPlugin = require("html-webpack-plugin");
module.exports = {entry: './src/main.js',output: {filename: 'bundle.js',path: path.resolve(__dirname, 'dist')},module: {rules: [{test: /.js$/,exclude: /node_modules/,use: {loader: 'babel-loader'}},{test: /.html$/,use: {loader: 'html-loader'}}]},plugins: [new HtmlWebPackPlugin({titel: 'react app',filename: 'index.html',template: './src/index.html'})]
};

配置完成后我们开始写react代码,首先在index.html文件中写入以下代码(在一个基本.html页面中加一个id是app的div)

<!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>React</title>
</head>
<body><div id="app"></div>
</body>
</html>

然后在写react代码前需要安装react和react-dom

npm install react react-dom --save

在App.js文件中创建一个组件并导出

import React from 'react'class App extends React.Component {render() {return(<div><h1>Hello World</h1></div>)}
}export  default App

在main.js中将组件导入并渲染

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

运行项目

所有的代码已经完毕,在运行前我们还要安装webpack-dev-server用来启动一个本地服务器来浏览我们的项目并且可以实现保存自动刷新

npm install webpack-dev-server --save-dev

然后在根目录的package.json中写一个脚本

"scripts": {"start": "webpack-dev-server --open --mode development"
}

最后运行npm run start就可以在浏览器中看到Hello World了

npm run start

总结

这篇文章介绍了三种创建React的方式,一般来说使用官方的脚手架比较方便,自己用webpack配置的话则更加灵活,根据项目的不同需要选择不同的方式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/396571.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

# 异运算_小学数学运算三要点:定律、法则与顺序(解析)

很多孩子的数学不好&#xff0c;尤其是女孩子。家长往往认定为数学不好就是孩子不擅长&#xff0c;能力差。其实未必&#xff0c;有的孩子数学不好的原因并不在于智商&#xff0c;而是没有理解到数学的方法与逻辑&#xff0c;比如小学的运算中&#xff0c;很多孩子并没有了解到…

机器学习笔记—再谈广义线性模型

前文从线性回归和 Logistic 回归引出广义线性回归的概念&#xff0c;很多人还是很困惑&#xff0c;不知道为什么突然来个广义线性回归&#xff0c;有什么用&#xff1f;只要知道连续值预测就用线性回归、离散值预测就用 Logistic 回归不就行了&#xff1f;还有一些概念之间的关…

局域网只能看到一部分电脑_win10 网上邻居看不到其它电脑、共享不了文件

最近电脑遇到了局域网文件共享的问题&#xff0c;Win 10 系统在网络和共享中心里无法看到其他电脑&#xff0c;只能看到本机。确认共享已经打开后&#xff0c;通过查找最终解决。下面是解决流程。1.进入&#xff1a;控制面板 – 网络和共享中心 – 更改高级共享设置&#xff0c…

作业1---四则运算

一.需求分析&#xff1a; 除了整数以外&#xff0c;还要支持真分数的四则运算&#xff0c;真分数的运算&#xff0c;例如&#xff1a;1/6 1/8 7/24 运算符为 , −, , 并且要求能处理用户的输入&#xff0c;并判断对错&#xff0c;打分统计正确率。 要求能处理用户输入的真分…

Lesson 001 —— 数据

Lesson 001 —— 数据 数据&#xff08;data&#xff09;是事实或观察的结果&#xff0c;是对客观事物的逻辑归纳&#xff0c;是用于表示客观事物的未经加工的原始素材。数据是信息的表现形式和载体&#xff0c;可以使符号、文字、数字、语音、图像、视频等。 进制 进制也就是进…

sql三个表join_「数据蒋堂」第 31 期:JOIN 简化 – 维度对齐

【数据蒋堂】第 31 期&#xff1a;JOIN 简化 – 维度对齐我们先把上一期中双子表对齐例子的 SQL 写出来&#xff1a;SELECT Orders.id, Orders.customer, A.x, B.y FROM Orders LEFT JOIN (SELECT id,SUM(price) x FROM OrderDetail GROUP BY id ) A ON Orders.idA.id LEFT J…

python-3.6.2安装

1、下载python-3.6.2-amd64.exe安装包 官网下载地址&#xff1a;https://www.python.org/ 2、Python安装&#xff0c;双击傻瓜式安装&#xff08;用英文路径&#xff0c;不要有空格&#xff09;&#xff0c; 特别要注意勾上Add Python 3.6 to PATH&#xff08;勾选后&#xff0…

vc mysql init 崩溃_故障分析 | 崩溃恢复巨慢原因分析

作者&#xff1a;xuty本文来源&#xff1a;原创投稿*爱可生开源社区出品&#xff0c;原创内容未经授权不得随意使用&#xff0c;转载请联系小编并注明来源。一、现象有个 MySQL 5.7 开发库异常挂掉后&#xff0c;奔溃恢复一直处于如下位置&#xff0c;且持续了 2 小时左右才起来…

surfaceview结束后怎么处理_污泥压滤机处理后的污泥怎么处置

在污泥处理处置中&#xff0c;污泥压滤机处理污泥只是对污泥进行脱水&#xff0c;并没有实现污泥资源化处置。再进行污泥“减量化、无害化、资源化”处理时&#xff0c;许多企业用污泥压滤机对污泥脱水处理后就不知道怎么继续处置了&#xff0c;从而使污泥饼无处可去&#xff0…

js数组详解

1&#xff0c;什么是数组数组是值得有序集合&#xff0c;每个值叫做一个元素&#xff0c;而每个元素在数组中有一个位置&#xff0c;以数字表示&#xff0c;称为索引。js的数组是无类型的&#xff0c;数组元素可以是任意类型&#xff0c;同一个数组中的不同元素可能是对象或数组…

[转载]linux内存映射mmap原理分析

转自&#xff1a;http://blog.csdn.net/yusiguyuan/article/details/23388771 内存映射&#xff0c;简而言之就是将用户空间的一段内存区域映射到内核空间&#xff0c;映射成功后&#xff0c;用户对这段内存区域的修改可以直接反映到内核空间&#xff0c;同样&#xff0c;内核空…

冒泡、快速排序小结

1.冒泡排序 (1) 比较领近的两个数 (2) 如果左边的比右边的数字大&#xff0c;则交换位置 (3) 向右移动一位&#xff0c;继续比较相邻的两个数 排序示例&#xff1a; 一轮排序结束后&#xff0c;最大值的位置已经移动最右端&#xff0c;再次如此循环&#xff0c;最终经过n-1次则…

synchronized 异常_由浅入深,Java 并发编程中的 Synchronized

synchronized 作用synchronized 关键字是 Java 并发编程中线程同步的常用手段之一。1.1 作用&#xff1a;确保线程互斥的访问同步代&#xff0c;锁自动释放&#xff0c;多个线程操作同个代码块或函数必须排队获得锁&#xff0c;保证共享变量的修改能够及时可见&#xff0c;获得…

Linux内存分配机制之伙伴系统和SLAB

转载请注明原文地址&#xff1a;http://www.cnblogs.com/ygj0930/p/6539590.html 内核内存管理的一项重要工作就是如何在频繁申请释放内存的情况下&#xff0c;避免碎片的产生。这就要求内核采取灵活而恰当的内存分配策略。通常&#xff0c;内存分配一般有两种情况&#xff1a…

this.$modal.confirm 自定义按钮关闭_自定义函数,让你玩转Excel得心应手

让“自动更正”输入统一的文本&#xff0c;你是不是经常为输入某些固定的文本,如《电脑报》而烦恼呢?那就往下看吧。1.执行“工具→自动更正”命令,打开“自动更正”对话框。2.在“替换”下面的方框中输入“pcw”(也可以是其他字符,“pcw”用小写),在“替换为”下面的方框中输…

CCF-CSP 最大的矩形

问题描述在横轴上放了n个相邻的矩形&#xff0c;每个矩形的宽度是1&#xff0c;而第i&#xff08;1 ≤ i ≤ n&#xff09;个矩形的高度是hi。这n个矩形构成了一个直方图。例如&#xff0c;下图中六个矩形的高度就分别是3, 1, 6, 5, 2, 3。请找出能放在给定直方图里面积最大的矩…

MySQL的主从复制云栖社区_MySQL-主从复制

前言前篇说了作为运维在数据库块最起码要会两大技能&#xff0c;今天来说说第二技能--主从复制随着业务的增长&#xff0c;一台数据库服务器以满足不了需求了&#xff0c;负载过重&#xff0c;这时候就需要减压&#xff0c;实现负载均衡读写分离&#xff0c;一主一从或一主多从…

mysql 数据分析的步骤_数据分析8个主要步骤

# 在对数据进行分析时&#xff0c;主要细分为明确目标、应用思维和如下8个具体步骤&#xff1a;1、读取数据2、清洗数据3、操作数据4、转换数据5、整理数据6、分析数据7、展现数据8、总结报告接下来将介绍使用python来具体处理数据&#xff0c;包括上面几个步骤的实现&#xff…

一、win7下安装yii2

作者&#xff1a;PHP学习网 出处&#xff1a;http://www.viphper.com/?p1159 本文版权归作者&#xff0c;欢迎转载&#xff0c;但未经作者同意必须保留此段声明&#xff0c;且在文章页面明显位置给出原文连接&#xff0c;否则保留追究法律责任的权利。 之前在liunx上安装过yii…

vs dll必须和exe在同一个目录_Win10系统丢失 .dll 文件的三种解决方案教程

有时候开机或打开一个软件时&#xff0c;系统会提示无法启动程序&#xff0c;这是怎么回事呢&#xff1f;这是因为计算机丢失某个或某些dll文件&#xff0c;由于系统本身不存在这些运行库文件&#xff0c;需要进行添加才能使用该软件。方法一&#xff1a;下载丢失的.dll文件&am…