当前位置: 首页 > news >正文

React新手必懂的知识点

react思想:组件化开发

React 的核心概念是组件化开发,将用户界面拆分成独立的可复用组件。学习如何创建和使用 React 组件,以及组件之间的数据传递和通信是非常重要的。
React的思想就是拆分组件与使用组件。

import React from 'react';// 定义一个名为 Greeting 的组件
class Greeting extends React.Component {render() {return <h1>Hello, {this.props.name}!</h1>;}
}// 在另一个组件中使用 Greeting 组件
class App extends React.Component {render() {return (<div><Greeting name="Alice" /><Greeting name="Bob" /></div>);}
}export default App;

react本质:jsx

react的本质就是JSX语法,通过使用 JSX,我们可以更直观地描述组件的结构和外观,使代码更易读和维护。同时,JSX 也提供了一些特性,如动态插值、条件渲染和循环渲染等,使得我们能够更灵活地构建动态的用户界面。

虚拟 DOM

React 使用虚拟 DOM 来管理和更新用户界面。了解虚拟 DOM 的概念和工作原理,以及如何使用 React 的 diff 算法来高效地更新 DOM,将有助于提高应用程序的性能和响应能力。
原理:当 React 组件的状态发生变化时,React 会创建一个新的虚拟 DOM 树。React 会将新的虚拟 DOM 树与之前的虚拟 DOM 树进行比较,找出两者之间的差异。React 会根据差异,只更新真实 DOM 中需要变化的部分,而不是重新渲染整个页面。

状态管理:state

学习如何使用 React 的状态(state)来管理组件的数据和状态。了解如何更新状态、处理用户输入和异步操作,以及如何在组件之间共享状态。
React 的 useState Hook 来定义一个名为 count 的状态变量,并初始化为 0。useState 返回一个数组,其中第一个元素是当前的状态值,第二个元素是更新状态的函数。(Hook的概念在react里有着至关重要的作用!)

import React, { useState } from 'react';function Counter() {// 使用 useState Hook 定义一个名为 count 的状态变量,并初始化为 0const [count, setCount] = useState(0);// 定义一个增加 count 的函数const increment = () => {setCount(count + 1);};// 定义一个减少 count 的函数const decrement = () => {setCount(count - 1);};return (<div><h1>Count: {count}</h1><button onClick={increment}>Increment</button><button onClick={decrement}>Decrement</button></div>);
}export default Counter;

生命周期:

React 组件具有生命周期方法,可以在组件的不同阶段执行特定的操作。了解组件的生命周期方法,如何使用它们来初始化组件、处理更新和销毁组件,将有助于编写可靠和高效的组件代码。

//constructor():组件实例化时调用,用于初始化状态和绑定事件处理函数。class MyComponent extends React.Component {constructor(props) {super(props);this.state = {count: 0};}render() {return <div>{this.state.count}</div>;}
}
//componentDidMount():组件挂载后调用,用于进行异步操作、数据获取等副作用操作。
class MyComponent extends React.Component {componentDidMount() {fetchData().then(data => {this.setState({ count: data.count });}).catch(error => {console.log(error);});}render() {return <div>{this.state.count}</div>;}
}
//componentDidUpdate(prevProps, prevState):组件更新后调用,用于响应组件的更新操作。class MyComponent extends React.Component {componentDidUpdate(prevProps, prevState) {if (prevState.count !== this.state.count) {console.log('Count updated');}}render() {return <div>{this.state.count}</div>;}
}

这里不详细说。因为react生命周期这个知识点,应该扩充成1个单独的文章的。
其中比较常见的constructor 作用:
初始化 state ,比如可以用来截取路由中的参数,赋值给 state 。
对类组件的事件做一些处理,比如绑定 this , 节流,防抖等。
对类组件进行一些必要生命周期的劫持,渲染劫持,这个功能更适合反向继承的HOC。

react组件的纯净思想

由于组件的复用,所以react对组件的纯净有一定的要求。下面是一个不纯净的案例。

import React, { useState, useEffect } from 'react';function RandomNumber() {const [number, setNumber] = useState(0);useEffect(() => {const interval = setInterval(() => {const randomNum = Math.floor(Math.random() * 100);setNumber(randomNum);}, 1000);return () => {clearInterval(interval);};}, []);return (<div><h2>Random Number: {number}</h2></div>);
}export default RandomNumber;

下面是修改后的纯净案例:

import React, { useState, useEffect } from 'react';function RandomNumber() {const [number, setNumber] = useState(0);useEffect(() => {const interval = setInterval(() => {setNumber(prevNumber => {const randomNum = Math.floor(Math.random() * 100);return randomNum;});}, 1000);return () => {clearInterval(interval);};}, []);return (<div><h2>Random Number: {number}</h2></div>);
}export default RandomNumber;

也因为纯净思想,所以app.js的内容最好就是全部都是组件,不要有任何非组件的存在。
有什么功能,函数都放细分的组件里面。不要放app.js。(app.js一旦不纯净,会使得所有连带刷新的。那重复刷新就非常严重了。)

路由和导航:React Router

对于构建单页应用程序(SPA),学习如何使用 React Router 或其他路由库来实现页面之间的导航和路由管理。

import React from 'react';
import { BrowserRouter, Route, Switch } from 'react-router-dom';
import Home from './Home';
import About from './About';
import NotFound from './NotFound';const Router = () => {return (<BrowserRouter><Switch><Route path="/" exact component={Home} /><Route path="/about" component={About} /><Route component={NotFound} /></Switch></BrowserRouter>);
};export default Router;

相关文章:

React新手必懂的知识点

react思想&#xff1a;组件化开发 React 的核心概念是组件化开发&#xff0c;将用户界面拆分成独立的可复用组件。学习如何创建和使用 React 组件&#xff0c;以及组件之间的数据传递和通信是非常重要的。 React的思想就是拆分组件与使用组件。 import React from react;// 定…...

es为什么这么快

es为什么这么快的方式 es的基于Lucene开源搜索引擎&#xff0c;负责文件存储和搜索&#xff0c;支持http请求&#xff0c;以json形式展示 这样介绍你有可能有点迷糊我们详细解释 es 使用的倒排索引的方式&#xff0c;进行数据存储方式&#xff0c;给每一个字段创建索引&…...

Pandas分组聚合_Python数据分析与可视化

Pandas分组聚合 分组单列和多列分组Series 系列分组通过数据类型或者字典分组获取单个分组对分组进行迭代 聚合应用单个聚合函数应用多个聚合函数自定义函数传入 agg() 中对不同的列使用不同的聚合函数 分组聚合的流程主要有三步&#xff1a; 分割步骤将 DataFrame 按照指定的…...

VMware17虚拟机Linux安装教程(详解附图,带VMware Workstation 17 Pro安装)

一、安装 VMware 附官方下载链接&#xff08;VM 17 pro&#xff09;&#xff1a;https://download3.vmware.com/software/WKST-1701-WIN/VMware-workstation-full-17.0.1-21139696.exe 打开下载好的VMware Workstation 17 Pro安装包&#xff1b; 点击下一步&#xff1b; 勾选我…...

基于SDN技术构建多平面业务承载网络

随着企业数字化的浪潮席卷各个行业&#xff0c;传统网络架构面临着更为复杂和多样化的挑战。企业正在寻找一种全面适应数字化需求的网络解决方案。随着软件定义网络&#xff08;SDN&#xff09;的发展&#xff0c;“多业务SDN一张网”解决方案为企业提供了一种全新的网络架构&a…...

关于卓越服务的调研报告

NetSuite知识会发起的本次调研从2023年11月2日开始&#xff0c;到11月12日结束。16日已向参与调研的朋友邮件回复&#xff0c;感谢您的付出&#xff01;今朝分享此报告&#xff0c;各位同学参考。 调研问题与反馈总结 问题1&#xff1a;您能想到哪些服务组织能够提供高满意度&…...

ubuntu22.04换源

1、系统信息 lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 22.04.3 LTS Release: 22.04 Codename: jammy2、进入 /etc/apt/ 目录&#xff1a; cd /etc/apt/ 3、备份默认源文件 sudo cp sources.list sources.list_bak 4、编…...

03. Python中的语句

1、前言 在《Python基础数据类型》一文中&#xff0c;我们了解了Python中的基础数据类型&#xff0c;今天我们继续了解下Python中的语句和函数。 2、语句 在Python中常用的语句可以大致分为两类&#xff1a;条件语句、循环语句。 2.1、条件语句 条件语句就是我们编码时常见…...

Linux CentOS7 添加网卡

一台主机中安装多块网卡&#xff0c;有许多优势。可以实现多项功能。 为了学习网卡参数的设置&#xff0c;可以为主机添加多块网卡。与添加磁盘一样&#xff0c;要在VMware中设置。利用图形化方式或命令行查看或设置网卡。本文仅初步讨论添加、查看与删除网卡&#xff0c;有关…...

2311rust,到54版本更新

1.50.0稳定版 常量泛型数组索引 继续向稳定的常量泛型迈进,此版本为[T;N]数组,添加了ops::Index和IndexMut的实现. fn second<C>(container: &C) -> &C::Output whereC: std::ops::Index<usize> ?Sized, {&container[1] } fn main() {let arra…...

【linux】补充:高效处理文本的命令学习(tr、uniq、sort、cut)

目录 一、tr——转换、压缩、删除 1、tr -s “分隔符” &#xff08;指定压缩连续的内容&#xff09; 2、tr -d 想要删除的东西 ​编辑 3、tr -t 内容1 内容2 将内容1全部转换为内容2&#xff08;字符数需要一一对应&#xff09; 二、cut——快速剪裁命令 三、uniq——去…...

Redis篇---第七篇

系列文章目录 文章目录 系列文章目录前言一、是否使用过 Redis Cluster 集群,集群的原理是什么?二、 Redis Cluster 集群方案什么情况下会导致整个集群不可用?三、Redis 集群架构模式有哪几种?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分…...

Shell脚本:Linux Shell脚本学习指南(第一部分Shell基础)一

你好&#xff0c;欢迎来到「Linux Shell脚本」学习专题&#xff0c;你将享受到免费的 Shell 编程资料&#xff0c;以及很棒的浏览体验。 这套 Shell 脚本学习指南针对初学者编写&#xff0c;它通俗易懂&#xff0c;深入浅出&#xff0c;不仅讲解了基本知识&#xff0c;还深入底…...

长短期记忆(LSTM)与RNN的比较:突破性的序列训练技术

长短期记忆&#xff08;Long short-term memory, LSTM&#xff09;是一种特殊的RNN&#xff0c;主要是为了解决长序列训练过程中的梯度消失和梯度爆炸问题。简单来说&#xff0c;就是相比普通的RNN&#xff0c;LSTM能够在更长的序列中有更好的表现。 Why LSTM提出的动机是为了解…...

Swift 如何打造兼容新老系统的字符串分割(split)方法

0. 概览 在 Swift 的开发中&#xff0c;我们经常要与字符串打交道。其中一个常见的操作就是用特定的“分隔符”来分割字符串&#xff0c;这里分隔符可能不仅仅是字符&#xff0c;而是多字符组成的字符串。 从 iOS 16 开始&#xff0c; 新增了对应的方法来专注此事。不过&am…...

JVM面试必备

目录 JVM三大问题 一、JVM内存区域划分 ​编辑 二、JVM类加载机制 双亲委派模型&#xff08;常考) 类加载的格式&#xff0c;类卸载 三、垃圾回收&#xff08;GC) 具体垃圾回收GC步骤 1.判定对象是否为垃圾 方案1:引用计数 方案2&#xff1a;可达性分析 2.释放对象的…...

战神传奇【我本沉默精修版】win服务端+双端+充值后台+架设教程

搭建资源下载:战神传奇【我本沉默精修版】win服务端双端充值后台架设教程-海盗空间...

安卓手机投屏到电视,跨品牌、跨地域同样可以实现!

在手机网页上看到的视频&#xff0c;也可以投屏到电视上看&#xff01; 长时间使用手机&#xff0c;难免脖子会酸。这时候&#xff0c;如果你将手机屏幕投屏到大电视屏幕&#xff0c;可以减缓脖子的压力&#xff0c;而且大屏的视觉体验更爽。 假设你有一台安卓手机&#xff0c;…...

python变量名解析总结

1 python变量名解析总结 点号和无点号变量名&#xff0c;用不同的处理方式。 &#xff08;1&#xff09; 无点号的变量名&#xff0c;比如X&#xff0c;使用的是作用域。 &#xff08;2&#xff09; 有点号的变量名&#xff0c;比如obj.X&#xff0c;使用对象的命名空间。 …...

端口号大揭秘:网络世界的“门牌号”有多牛?

大家好&#xff0c;今天我们来聊一聊网络中的端口号。如果你以为端口号只是冷冰冰的数字&#xff0c;那你就大错特错了。端口号&#xff0c;这些看似枯燥的数字背后&#xff0c;隐藏着一个个生动的故事。 目录 大家好&#xff0c;今天我们来聊一聊网络中的端口号。如果你以为端…...

软考高级信息系统项目管理师备考笔记-第14章项目沟通管理

第14章项目沟通管理备考知识点及历年真题 一、历年真题分布 2023年5月 选择题3分 案例6分 2023年11月 选择题3分 案例5分第一批、案例10分第二批 2024年5月 选择题3分 案例16分第一批 2025年5月 选择题2分 案例4分第一批、案例9分第二批 二、备考学习笔记 14.1 …...

RevokeMsgPatcher:微信/QQ/TIM防撤回补丁工具完全指南

RevokeMsgPatcher&#xff1a;微信/QQ/TIM防撤回补丁工具完全指南 【免费下载链接】RevokeMsgPatcher :trollface: A hex editor for WeChat/QQ/TIM - PC版微信/QQ/TIM防撤回补丁&#xff08;我已经看到了&#xff0c;撤回也没用了&#xff09; 项目地址: https://gitcode.co…...

基于视觉大模型的桌面自动化:Screen Vision技能实现AI操控电脑

1. 项目概述&#xff1a;让AI成为你的“数字双手” 你有没有想过&#xff0c;有一天你可以像指挥一个真人助手一样&#xff0c;用自然语言告诉AI&#xff1a;“帮我把桌面上的那个PDF文件拖到‘已处理’文件夹里”&#xff0c;或者“打开浏览器&#xff0c;搜索一下今天北京的…...

智能体开发中利用OpenClaw与Taotoken构建高效工作流

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 智能体开发中利用OpenClaw与Taotoken构建高效工作流 在开发基于大语言的智能体应用时&#xff0c;一个稳定、灵活且易于管理的模型…...

1k Star的p-retry,让异步操作失败自动重试

文章目录1k Star的p-retry&#xff0c;让异步操作失败自动重试核心功能适用场景注意事项1k Star的p-retry&#xff0c;让异步操作失败自动重试 sindresorhus开源的p-retry项目&#xff0c;目前在GitHub上获得1009个Star。这个库的核心功能是为异步操作添加重试机制&#xff0c…...

【Midjourney Sumi-e风格创作终极指南】:20年AI绘画专家亲授3大笔触控制法则、5类水墨失真避坑清单与实时渲染参数配置表

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Sumi-e水墨美学与AI生成的本体论契合 留白即存在 水墨画中的“余白”并非空无&#xff0c;而是气韵流转的场域——这与生成式AI中隐空间&#xff08;latent space&#xff09;的拓扑结构惊人地同构。扩…...

使用Node.js在虚拟机后端服务中集成Taotoken多模型调用

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 使用Node.js在虚拟机后端服务中集成Taotoken多模型调用 在虚拟机环境中部署Node.js后端服务时&#xff0c;直接对接多个大模型厂商…...

3大技术创新:重新定义Windows Android生态的工具体验

3大技术创新&#xff1a;重新定义Windows Android生态的工具体验 【免费下载链接】wsa-toolbox A Windows 11 application to easily install and use the Windows Subsystem For Android™ package on your computer. 项目地址: https://gitcode.com/gh_mirrors/ws/wsa-tool…...

Ubuntu 18.04下ISE 14.7与Vivado 2018.2的避坑安装与深度配置指南

1. 环境准备与依赖安装 在Ubuntu 18.04上安装ISE 14.7和Vivado 2018.2之前&#xff0c;系统环境配置是决定成败的关键。我遇到过不少开发者因为跳过这个步骤&#xff0c;导致后续安装过程频繁报错。这里分享几个必须检查的要点&#xff1a; 首先确认系统架构&#xff0c;虽然…...

Windows键盘记录器:为什么需要、它是什么、以及如何正确使用

Windows键盘记录器&#xff1a;为什么需要、它是什么、以及如何正确使用 【免费下载链接】keylogger Keylogger for Windows. 项目地址: https://gitcode.com/gh_mirrors/keylogg/keylogger 在当今数字化时代&#xff0c;键盘记录器作为系统监控和用户行为分析工具&…...