react是什么?

ops/2024/9/20 9:03:46/ 标签: react.js, 前端, 前端框架

在这里插入图片描述

文章目录

    • 核心特点
        • 1. **组件化**
        • 2. **虚拟 DOM**
      • 3. **声明式编程**
        • 4. **单向数据流**
        • 5. **JSX 语法**
        • 6. **Hooks**
    • react的优势劣势


React 是一个由 Facebook 开发和维护的开源 JavaScript 库,用于构建用户界面,特别是单页应用程序(SPA)。它通过组件化的方式来帮助开发者创建可重用的 UI 组件,从而简化了前端开发的复杂度。React 的核心特点包括:

核心特点

React 是一个强大的工具,用于构建动态和高效的用户界面。通过组件化、虚拟 DOM、声明式编程、单向数据流和 Hooks 等特性,React 提供了一种高效、可维护的方式来开发复杂的前端应用程序。

1. 组件化

概念:在 React 中,UI 被拆分成一个个独立的、可重用的组件。每个组件可以是一个函数或类,负责定义 UI 的某一部分。

组件的两种类型

  • 函数组件:更简洁,通常用于无状态的组件。它们是纯函数,接收 props 作为参数,并返回要渲染的 JSX。

    function Greeting(props) {return <h1>Hello, {props.name}!</h1>;
    }
    
  • 类组件:具有更多功能,例如生命周期方法和内部状态。虽然函数组件现在也可以通过 Hooks 实现这些功能,但类组件仍然存在于许多代码库中。

    class Greeting extends React.Component {render() {return <h1>Hello, {this.props.name}!</h1>;}
    }
    
2. 虚拟 DOM

概念:虚拟 DOM 是 React 内部使用的一种优化技术。它在内存中维护一个虚拟的 DOM 树,只有在虚拟 DOM 和实际 DOM 之间存在差异时,React 才会更新实际 DOM。

工作原理

  • 当组件的状态或属性发生变化时,React 首先更新虚拟 DOM。
  • React 然后通过一种称为“协调”的算法,比较新旧虚拟 DOM 的差异。
  • 最后,React 将实际 DOM 更新为与虚拟 DOM 相匹配的状态。

优点:通过减少直接对实际 DOM 的操作,React 提高了性能和响应速度。

3. 声明式编程

概念:声明式编程是指描述你希望界面如何显示,而不是如何实现它。你只需要告诉 React “这个组件应该如何渲染”,React 会处理状态变化和 UI 更新的细节。

示例:使用 React,你可以通过 JSX(JavaScript XML)来描述组件的结构:

function App() {const [count, setCount] = React.useState(0);return (<div><p>You clicked {count} times</p><button onClick={() => setCount(count + 1)}>Click me</button></div>);
}

在上面的例子中,<button> 的点击事件会更新 count,React 会自动重新渲染 UI 以反映这种变化。

4. 单向数据流

概念:在 React 中,数据流是单向的,即从父组件流向子组件。这种数据流动使得状态管理更加清晰和易于调试。

示例

function ParentComponent() {const [message, setMessage] = React.useState("Hello");return <ChildComponent message={message} />;
}function ChildComponent(props) {return <p>{props.message}</p>;
}

在这个例子中,ParentComponentmessage 作为 props 传递给 ChildComponentChildComponent 只接收数据,不会修改它。

5. JSX 语法

概念:JSX 是一种 JavaScript 语法扩展,允许你在 JavaScript 代码中直接编写类似 HTML 的结构。JSX 使得组件的定义更加直观和可读。

示例

const element = <h1>Hello, world!</h1>;

JSX 语法在编译时会被转换为 JavaScript 代码,例如:

const element = React.createElement('h1', null, 'Hello, world!');
6. Hooks

概念:Hooks 是 React 16.8 引入的新特性,允许在函数组件中使用状态和其他 React 特性,而无需编写类组件。

常用 Hooks

  • useState:用于在函数组件中添加状态。

    const [count, setCount] = React.useState(0);
    
  • useEffect:用于处理副作用,如数据获取和 DOM 操作。

    React.useEffect(() => {document.title = `You clicked ${count} times`;
    }, [count]);
    
  • useContext:用于在组件树中传递数据,而无需通过层层的 props 传递。

    const value = React.useContext(MyContext);
    

react的优势劣势

优势

  1. 组件化:使 UI 结构更清晰,可重用性高。
  2. 虚拟 DOM:提高性能,减少实际 DOM 操作。
  3. 声明式编程:简化 UI 逻辑和状态管理。
  4. 强大的生态系统:丰富的库和工具支持,社区活跃。

劣势

  1. 学习曲线:需要理解 JSX 和 Hooks 等新概念。
  2. 性能问题:复杂应用可能需要优化,避免性能瓶颈。
  3. 工具链复杂:配置和管理工具链可能较为繁琐。
  4. 频繁更新:快速迭代可能导致不兼容的问题和学习成本。

您好,我是肥晨。
欢迎关注我获取前端学习资源,日常分享技术变革,生存法则;行业内幕,洞察先机。


http://www.ppmy.cn/ops/113331.html

相关文章

Photoshop cc2019安装教程

软件介绍 Adobe Photoshop&#xff0c;简称“PS”&#xff0c;是美国Adobe公司旗下最为出名的图像处理软件系列之一&#xff0c;为图像扫描、编辑修改、图像制作、广告创意&#xff0c;图像输入与输出于一体的图形图像处理软件&#xff0c;深受广大平面设计人员和电脑美术爱好…

半导体晶圆缺陷图谱数据集

半导体晶圆缺陷图谱 从开源数据集WM811K转化成图片&#xff0c;用于图像分类算法开发。 数据集描述 该数据集来源于著名的开源数据集WM811K&#xff0c;它最初是用于半导体晶圆缺陷检测的研究。数据集包含了大量晶圆的缺陷信息&#xff0c;通过将原始数据转化为图像形式&#…

Docker本地部署Chatbot Ollama搭建AI聊天机器人并实现远程交互

文章目录 前言1. 拉取相关的Docker镜像2. 运行Ollama 镜像3. 运行Chatbot Ollama镜像4. 本地访问5. 群晖安装Cpolar6. 配置公网地址7. 公网访问8. 固定公网地址 前言 本文主要分享如何在群晖NAS本地部署并运行一个基于大语言模型Llama 2的个人本地聊天机器人并结合内网穿透工具…

八股文-JVM

是什么&#xff1f;有什么用&#xff1f;谁发明的&#xff1f;什么时候发明的&#xff1f; Java虚拟机&#xff0c;用来运行Java程序&#xff0c;有很多个版本的虚拟机&#xff0c;比如HotSpot&#xff0c;最开始是SUN公司开发人员&#xff0c;和Java一起发布&#xff0c;现在…

前端开发中的防抖与节流

在前端开发的世界里&#xff0c;防抖&#xff08;debounce&#xff09;和节流&#xff08;throttle&#xff09;是两个非常重要的概念&#xff0c;它们能够帮助我们更好地处理频繁触发的事件&#xff0c;提升用户体验和系统性能。 一、防抖&#xff08;debounce&#xff09; …

it基础软件运维管理:从操作系统到数据库,再到中间件和应用系统

在当今的信息化时代&#xff0c;基础软件的运维管理对于企业的稳定运营至关重要。从操作系统到数据库&#xff0c;再到中间件和应用系统&#xff0c;每一个环节都需要精细化的管理和维护。本文将深入探讨基础软件运维管理的关键方面&#xff0c;并结合监控易一体化运维软件&…

DOM XMLHttpRequest

DOM XMLHttpRequest 概述 XMLHttpRequest(XHR)是JavaScript的一个对象,它可以在不刷新整个网页的情况下,从服务器请求数据。这使得网页可以异步更新,提高了用户体验。XHR最初由微软在Internet Explorer 5中引入,后来被其他浏览器采纳,并成为W3C标准的一部分。 使用场…

vue实现鼠标滚轮控制页面横向滑动

先看效果 20240919_095531 1.首先创建一个xScroll.vue组件 <template><div class"main" v-size-ob"mainSize"><div class"v-scroll"><div class"content"><slot></slot></div></div>…

LeeCode 3. 无重复字符的最长子串

经典方法滑动窗口:(两个指针) 针对这个题我们首先假定两个指针 left 和 right 分别指在数组最左端. 然后两个变量记录长度length和maxlength. 并且因为不能有重复的字符,我们使用HashSet结构来当收集结果的表. 随着右指针不断往右移,左指针和右指针之间的就为截取的字符,而这…

Flask项目入门和视图

1、第一个项目的结构 以示例代码中的入口文件app.py为例子 &#xff08;1&#xff09;引入Flask以及创建Flask对象 from flask import Flask app Flask(__name__)&#xff08;2&#xff09; 路由route 视图函数 app.route(/index/) def hello_world():# 响应&#xff1a;…

快速搭建最简单的前端项目vue+View UI Plus

1 引言 ‌‌Vue是一套用于构建Web前端界面的渐进式JavaScript框架。‌‌它以其易学易用、性能出色、灵活多变而深受开发者喜爱&#xff0c;并且与其他前端框架&#xff08;如‌React和‌Angular&#xff09;相比&#xff0c;在国内市场上受到了广泛的认可和使用。点击进入官方…

Unity3D下如何播放RTSP流?

技术背景 在Unity3D中直接播放RTSP&#xff08;Real Time Streaming Protocol&#xff09;流并不直接支持&#xff0c;因为Unity的内置多媒体组件&#xff08;如AudioSource和VideoPlayer&#xff09;主要设计用于处理本地文件或HTTP流&#xff0c;而不直接支持RTSP。所以&…

在MAC中Ollama开放其他电脑访问

ollama安装完毕后默认只能在本地访问&#xff0c;之前我都是安装其他的软件之后可以结合开放其他端口访问&#xff0c;其实是可以新增或修改下电脑的系统配置&#xff0c;就可以打开端口允许除本机IP或localhost访问。 步骤如下&#xff1a; 1、查看端口&#xff08;默认是&…

Kafka+PostgreSql,构建一个总线服务

之前开发的系统&#xff0c;用到了RabbitMQ和SQL Server作为总线服务的传输层和存储层&#xff0c;最近一直在看Kafka和PostgreSql相关的知识&#xff0c;想着是不是可以把服务总线的技术栈切换到这个上面。今天花了点时间试了试&#xff0c;过程还是比较顺利的&#xff0c;后续…

C++返回值优化(Return Value Optimization, RVO)与移动语义(Move Semantics)

在C编程中&#xff0c;返回值优化&#xff08;Return Value Optimization, RVO&#xff09;与移动语义&#xff08;Move Semantics&#xff09;是提高程序效率、减少不必要的对象复制的重要机制。 一、返回值优化&#xff08;RVO&#xff09; 基本概念 返回值优化是一种编译器…

Milvus - 构建向量数据库并进行相似度查询

向量相似度检索在大规模数据分析和机器学习应用中是一个非常关键的任务&#xff0c;特别是在处理文本、图像或其他嵌入向量时。Milvus 是一个高性能的开源向量数据库&#xff0c;专为存储和检索大规模向量数据设计。本文将介绍如何在 Docker 中安装 Milvus&#xff0c;并展示如…

GO主流开源框架

GO主流开源框架 Go 语言有着丰富的开源框架生态&#xff0c;涵盖了多种应用场景&#xff0c;如 Web 开发、数据库操作、微服务、日志处理等。以下是一些常见的 Go 框架及其典型作用场景&#xff1a; 1. Web 框架 Gin: 作用&#xff1a;一个高性能的轻量级 Web 框架&#xff…

今天不写项目,聊聊后端面试吧

首先感谢大家之前的观看呀~兄弟们~ 这边把我去过几家公司面试的题目都写一下哈&#xff0c;像我大二下&#xff0c;就是前两个月7-9进了公司进行后端实习&#xff0c;哎.....反正就是学学学..话不多说~ 1.Frist 1.HashMap实现原理 HashMap是基于哈希表的Map接口的非同步实现…

网站在线客服插件配置

使用工具&#xff1a;百度爱番番 下载地址&#xff1a; 百度爱番番—企业的一站式智能营销管家 一、下载百度爱番番APP&#xff0c;注册账号 二、 登录app 三、点击设置——站点设置——新建站点 四、设置站点名称——站点地址——PC站点——确定 五、点击配置好的站点的获取代…

leetcode73矩阵置零

思路 想到的就是需要一个数组来记录是不是这行或者这列是不是有零&#xff0c;然后最后再扫描一遍这个矩阵 题解 借助第0行第0列来记录这个行是不是有0&#xff0c;这个列是不是有0 另外&#xff0c;这个矩阵不大&#xff0c;所以可能有重复的置0应该也没事。 class Soluti…