带你了解React框架,介绍,入门,以及React的开发依赖介绍
1、React初识,先看一下官方的React介绍
目前国内最流行的三大框架:Vue、React、Angular。 React是一个用于构建用户界面的JavaScript库,由Facebook开源并维护。它提供了一种声明式的编程模型,可以帮助开发者更高效地构建复杂的用户界面。React采用组件化的设计思想,将用户界面拆分成多个独立的组件,每个组件都有自己的状态和生命周期,可以被复用和组合。
React的主要特点包括:
- 声明式编程:开发者只需要声明需要渲染的内容,React会自动处理页面的更新。
- 组件化设计:将页面拆分成多个独立的组件,每个组件都有自己的状态和生命周期,可以被复用和组合。
- 虚拟DOM:React使用虚拟DOM来提高性能和操作效率,可以在不重新渲染整个页面的情况下更新特定部分的内容。
- 单向数据流:React采用单向数据流的设计思想,父组件可以通过props传递数据给子组件,子组件通过回调函数将数据传递回父组件。
- 高性能:React采用虚拟DOM和优化算法等方式来提高性能和操作效率。
React可以与其他框架和库进行配合使用,例如Redux、React Router等,可以帮助开发者更好地管理数据和路由等方面的功能。
2、为什么学React?
React是一个流行的JavaScript库,广泛用于构建用户界面。学习React有以下几个好处:
- 提高开发效率:React采用声明式编程模型,可以帮助开发者更高效地构建复杂的用户界面。
- 组件化设计:React将用户界面拆分成多个独立的组件,每个组件都有自己的状态和生命周期,可以被复用和组合。
- 虚拟DOM:React使用虚拟DOM来提高性能和操作效率,可以在不重新渲染整个页面的情况下更新特定部分的内容。
- 单向数据流:React采用单向数据流的设计思想,父组件可以通过props传递数据给子组件,子组件通过回调函数将数据传递回父组件。
- 大量资源和社区支持:React拥有广泛的资源和社区支持,可以帮助开发者更好地学习和使用该库。
3、JSX基础语法
JSX是一种JavaScript的语法扩展,可以让开发者在JavaScript代码中直接编写HTML样式的代码。它可以让代码更加直观和易于理解。 示例代码如下:
import React from 'react';
function App() {
return (
<div>
<h1>Hello, React!</h1>
<p>This is a JSX example.</p>
</div>
);
}
export default App;
在上面的代码中,使用了JSX语法来创建一个React组件。在JSX中,可以直接使用HTML标签和属性,同时也可以在JavaScript代码中使用花括号来嵌入表达式。
4、两种创建虚拟DOM的方式
React中有两种常见的创建虚拟DOM的方式:JSX和纯JavaScript。
① JSX
使用JSX可以让开发者在JavaScript代码中编写类似HTML的代码,从而更加直观和易于理解。JSX可以通过Babel等工具将其转换为纯JavaScript代码。
示例代码如下:
const element = <h1>Hello, React!</h1>;
在上面的代码中,使用JSX来创建一个React元素。
② 纯JavaScript
使用纯JavaScript来创建虚拟DOM可以避免使用JSX带来的一些开销,同时也可以更加灵活地控制虚拟DOM的创建过程。
示例代码如下:
const element = React.createElement(
'h1',
{className: 'greeting'},
'Hello, React!'
);
在上面的代码中,使用React.createElement方法来创建一个React元素。
5、模块与组件
在React中,模块和组件是两个常见的概念。
① 模块
模块是一种封装和组织代码的方式,可以将相关的代码放在同一个文件或目录中,并通过导入和导出来实现代码的复用和组合。在React中,可以使用ES6模块化的语法来定义和导出组件。
示例代码如下:
import React from 'react';
function MyComponent() {
return <h1>Hello, React!</h1>;
}
export default MyComponent;
在上面的代码中,定义了一个名为MyComponent的组件,并通过export default来将该组件导出。
② 组件
组件是React中最基本的构建块,可以将用户界面拆分成多个独立的、可复用的部分。每个组件都有自己的状态和生命周期,可以被复用和组合,从而实现更加灵活和可维护的代码。
示例代码如下:
import React from 'react';
class MyComponent extends React.Component {
render() {
return <h1>Hello, React!</h1>;
}
}
export default MyComponent;
在上面的代码中,定义了一个名为MyComponent的组件,并通过继承React.Component来定义该组件的生命周期和状态等。
6、模块化与组件化的理解
模块化和组件化是两个相似但又有区别的概念。
① 模块化
模块化是一种封装和组织代码的方式,可以将相关的代码放在同一个文件或目录中,并通过导入和导出来实现代码的复用和组合。模块化的好处在于可以提高代码的可维护性和可复用性,从而实现更加灵活和高效的开发。
② 组件化
组件化是一种将用户界面拆分成多个独立的、可复用的部分的方式,每个组件都有自己的状态和生命周期,可以被复用和组合。组件化的好处在于可以提高代码的可维护性和可复用性,同时也可以让代码更加灵活和易于理解。
7、React的依赖介绍
React的主要依赖包括:
- react:React的核心库,包括React元素和组件等基础功能。
- react-dom:用于将React组件渲染到DOM中,并提供一些DOM操作的功能。
- prop-types:用于对组件的属性进行类型检查和限制。
- react-router:用于实现前端路由功能,可以让单页应用更加灵活。
- redux:用于管理React应用中的状态,可以让应用的数据流更加清晰和可维护。
- styled-components:用于实现CSS-in-JS的功能,可以让组件的样式更加灵活和易于维护。
开发React必须依赖三个库
:
react:包含react所必须的核心代码
react-dom:react渲染在不同平台所需要的核心代码
[babel](https://so.csdn.net/so/search?q=babel&spm=1001.2101.3001.7020):将jsx转换成React代码的工具, jsx语法浏览器是不识别的
第一次接触React会被它繁琐的依赖搞蒙,居然依赖这么多东西: (直接放弃?)
对于Vue来说,我们只是依赖一个vue.js文件即可,但是react居然要依赖三个包。
其实呢,这三个库是各司其职的,目的就是让每一个库只单纯做自己的事情;
在React的0.14版本之前是没有react-dom这个概念的,所有功能都包含在react里;
为什么要进行拆分呢?原因就是推出react-native
react包中包含了react web和react-native所共同拥有的核心代码。
react-dom针对web和native所完成的事情不同:
· web端:react-dom会将jsx最终渲染成真实的DOM,显示在浏览器中
· native端:react-dom会将jsx最终渲染成原生的控件(比如Android中的Button,iOS中的UIButton)。
Babel和React的关系
babel是什么呢?
Babel ,又名 Babel.js。
是目前前端使用非常广泛的编译器、转移器。
比如当下很多浏览器并不支持ES6的语法,但是确实ES6的语法非常的简洁和方便,我们开发时希望使用它。
那么编写源码时我们就可以使用ES6来编写,之后通过Babel工具,将ES6转成大多数浏览器都支持的ES5的语法。
React和Babel的关系:
默认情况下开发React其实可以不使用babel。
但是前提是我们自己使用 React.createElement 来编写源代码,它编写的代码非常的繁琐和可读性差。
那么我们就可以直接编写jsx(JavaScript XML)的语法,并且让babel帮助我们转换成React.createElement。
React的依赖引入
所以,我们在编写React代码时,这三个依赖都是必不可少的。
那么,如何添加这三个依赖:
方式一:直接CDN引入
方式二:下载后,添加本地依赖
方式三:通过npm管理(后续脚手架再使用)
暂时我们直接通过CDN引入,来演练下面的示例程序:
这里有一个crossorigin的属性,这个属性的目的是为了拿到跨域脚本的错误信息
<script src="https://unpkg.com/react@18/umd/react.development.js" crossorigin></script>
<script src="https://unpkg.com/react-dom@18/umd/react-dom.development.js" crossorigin></script>
<script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script>
转载自:https://juejin.cn/post/7242007082920132664