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

React 中的错误边界(Error Boundaries),如何使用它们捕获组件错误

大白话React 中的错误边界(Error Boundaries),如何使用它们捕获组件错误

在 React 里,错误边界就像是一个“小卫士”,专门负责在组件出现错误时挺身而出,避免整个应用因为一个小错误就崩溃掉。接下来我会详细介绍它,并且在代码里加上注释,让你轻松理解。

什么是错误边界?

想象一下,你有一个大型的 React 应用,里面有好多好多组件,就像一个热闹的城市里有各种各样的建筑。要是其中一个建筑出了问题(组件报错),要是没有防护措施,整个城市可能都会受到影响(应用崩溃)。而错误边界就像是给每个区域设置了一个“保护罩”,当某个区域的建筑出问题时,保护罩能把问题隔离起来,不让它影响到其他区域。

在 React 中,错误边界是一个特殊的组件,它可以捕获并处理在它的子组件树中发生的 JavaScript 错误,然后展示一个备用的 UI,而不是让整个应用崩溃。

如何创建一个错误边界组件?

下面是一个简单的错误边界组件示例,代码里我会加上详细的注释:

import React, { Component } from 'react';// 定义一个错误边界组件,继承自 React.Component
class ErrorBoundary extends Component {// 构造函数,初始化状态constructor(props) {super(props);// 定义一个 state 变量 hasError,用于标记是否发生错误this.state = { hasError: false };}// 静态方法,当子组件抛出错误时会被调用static getDerivedStateFromError(error) {// 更新 state 中的 hasError 为 true,表示发生了错误return { hasError: true };}// 当错误发生时会调用这个方法,可以在这里进行错误日志记录等操作componentDidCatch(error, errorInfo) {// 这里可以添加代码将错误信息发送到服务器进行日志记录console.log('错误信息:', error);console.log('错误详情:', errorInfo);}// 渲染方法render() {// 如果 hasError 为 true,说明发生了错误,渲染备用的 UIif (this.state.hasError) {return <div>哎呀,这里好像出了点问题,请稍后再试!</div>;}// 如果没有错误,正常渲染子组件return this.props.children;}
}export default ErrorBoundary;

如何使用错误边界组件?

现在我们已经有了一个错误边界组件,接下来看看怎么使用它。下面是一个简单的示例:

import React from 'react';
import ErrorBoundary from './ErrorBoundary';// 定义一个可能会出错的组件
const ProblematicComponent = () => {// 模拟一个错误,这里会抛出一个未定义变量的错误throw new Error('哎呀,我出错啦!');return <div>这是一个可能会出错的组件</div>;
};const App = () => {return (<div><h1>我的 React 应用</h1>{/* 使用错误边界组件包裹可能会出错的组件 */}<ErrorBoundary><ProblematicComponent /></ErrorBoundary></div>);
};export default App;

代码解释

  1. 错误边界组件 ErrorBoundary
    • constructor:初始化 hasError 状态为 false,表示初始时没有错误。
    • getDerivedStateFromError:当子组件抛出错误时,这个静态方法会被调用,将 hasError 状态更新为 true
    • componentDidCatch:在错误发生后调用,你可以在这里添加代码将错误信息发送到服务器进行日志记录。
    • render:根据 hasError 状态决定渲染备用 UI 还是正常渲染子组件。
  2. 使用错误边界组件
    • ProblematicComponent:这是一个可能会出错的组件,我们在里面模拟了一个错误。
    • App 组件:使用 ErrorBoundary 组件包裹 ProblematicComponent,当 ProblematicComponent 抛出错误时,ErrorBoundary 会捕获错误并展示备用 UI。

通过使用错误边界,你可以让你的 React 应用更加健壮,即使部分组件出现错误,也不会影响整个应用的正常运行。

除了使用错误边界,还有其他方式处理React组件中的错误吗?

除了错误边界,在 React 组件里还有几种处理错误的方式,下面我会详细介绍。

1. 内联的 try...catch 语句

try...catch 语句是 JavaScript 里处理错误的基础手段,能在组件内部运用它来捕获并处理错误。不过这种方式只能处理同步代码里的错误,对于异步代码,需要搭配 async/await 或者 .then().catch() 来处理。

下面是一个简单示例:

import React from 'react';const MyComponent = () => {try {// 模拟一个会抛出错误的操作const result = 1 / 0; // 这里会抛出除零错误return <div>结果: {result}</div>;} catch (error) {return <div>出错啦: {error.message}</div>;}
};export default MyComponent;

在这个示例里,try 块中的代码若抛出错误,catch 块就会捕获该错误,并且展示错误信息。

2. 使用 Promise.catch() 方法处理异步错误

要是组件里有异步操作,像 fetch 请求或者 setTimeout 之类的,就可以使用 Promise.catch() 方法来处理错误。

示例如下:

import React, { useEffect, useState } from 'react';const MyAsyncComponent = () => {const [data, setData] = useState(null);const [error, setError] = useState(null);useEffect(() => {const fetchData = async () => {try {const response = await fetch('https://api.example.com/data');if (!response.ok) {throw new Error('网络请求失败');}const jsonData = await response.json();setData(jsonData);} catch (err) {setError(err.message);}};fetchData();}, []);if (error) {return <div>出错啦: {error}</div>;}if (data) {return <div>数据: {JSON.stringify(data)}</div>;}return <div>加载中...</div>;
};export default MyAsyncComponent;

在这个示例中,fetchData 函数是一个异步函数,使用 try...catch 来捕获 fetch 请求过程中可能出现的错误。若请求失败,就把错误信息存到 error 状态里,然后在组件中展示出来。

3. 全局错误处理

可以借助 window.onerror 或者 window.addEventListener('error') 来捕获全局的 JavaScript 错误。不过这种方式并非专门针对 React 组件的,它会捕获整个页面里的所有错误。

示例如下:

window.onerror = function (message, source, lineno, colno, error) {console.log('全局错误捕获:', message);// 可以在这里添加代码将错误信息发送到服务器进行日志记录return true; // 返回 true 可以阻止错误冒泡
};

在这个示例中,window.onerror 函数会在任何 JavaScript 错误发生时被调用,并且可以把错误信息记录下来。

4. 使用 React Error Event

React 17 及以上版本支持 React Error Event,这允许你在根组件中捕获所有未处理的错误。

示例如下:

import ReactDOM from 'react-dom/client';
import App from './App';const root = ReactDOM.createRoot(document.getElementById('root'));root.render(<React.StrictMode><App /></React.StrictMode>
);window.addEventListener('error', (event) => {console.log('React 错误捕获:', event.message);// 可以在这里添加代码将错误信息发送到服务器进行日志记录
});

在这个示例中,window.addEventListener('error') 会捕获所有未处理的 React 错误。

在React中使用错误边界有哪些注意事项?

在 React 中使用错误边界时,有以下这些注意事项:

1. 错误边界的适用范围

  • 只能捕获特定类型的错误:错误边界只能捕获其子组件树中发生的渲染期间、生命周期方法以及构造函数里的 JavaScript 错误,无法捕获以下几种错误:
    • 事件处理中的错误:在 React 里,事件处理函数不会在渲染期间执行,所以错误边界无法捕获这些错误。你可以使用 try...catch 语句来处理事件处理函数中的错误。例如:
import React from 'react';const MyComponent = () => {const handleClick = () => {try {// 可能会出错的代码throw new Error('事件处理出错');} catch (error) {console.log('捕获到事件处理中的错误:', error.message);}};return (<button onClick={handleClick}>点击我</button>);
};export default MyComponent;
- **异步代码中的错误**:像 `setTimeout`、`Promise` 或者 `async/await` 这类异步操作中的错误,错误边界也无法捕获。你需要在异步代码里使用 `try...catch` 或者 `.catch()` 方法来处理错误。
- **服务端渲染时的错误**:错误边界在服务端渲染(SSR)时不会捕获错误,需要使用其他方法来处理 SSR 中的错误。

2. 错误边界组件的实现

  • 类组件的使用:截至 React 18,错误边界只能通过类组件来实现,因为 getDerivedStateFromErrorcomponentDidCatch 这两个方法是类组件特有的。不过,未来 React 可能会提供函数组件实现错误边界的方式。例如:
import React, { Component } from 'react';class ErrorBoundary extends Component {constructor(props) {super(props);this.state = { hasError: false };}static getDerivedStateFromError(error) {return { hasError: true };}componentDidCatch(error, errorInfo) {console.log('错误信息:', error);console.log('错误详情:', errorInfo);}render() {if (this.state.hasError) {return <div>哎呀,这里好像出了点问题,请稍后再试!</div>;}return this.props.children;}
}export default ErrorBoundary;
  • 状态管理:在错误边界组件里,不要尝试在 componentDidCatch 方法中更新子组件的状态,因为此时子组件可能已经因为错误而无法正常更新状态了。通常,错误边界组件只更新自身的状态,用来展示备用 UI。

3. 错误边界的嵌套与位置

  • 嵌套错误边界:可以嵌套使用多个错误边界组件,内层的错误边界会先捕获错误,若内层错误边界无法处理,外层的错误边界会继续尝试捕获。不过,要避免过度嵌套错误边界,以免让代码变得复杂。
  • 合理放置错误边界:要根据应用的结构和需求,合理放置错误边界组件。一般来说,把错误边界放在可能会出错的组件外层,或者放在一些关键组件的外层,以防止错误影响到整个应用。

4. 错误日志与监控

  • 记录错误信息:在 componentDidCatch 方法中,要记录详细的错误信息,比如错误对象和错误信息,方便后续调试和定位问题。可以将错误信息发送到服务器进行日志记录,例如使用 fetch 请求将错误信息发送到后端。
  • 错误监控:结合第三方错误监控工具,像 Sentry、Bugsnag 等,来实时监控应用中的错误,及时发现和解决问题。

5. 开发与生产环境的差异

  • 开发环境:在开发环境中,错误边界可能会隐藏一些有用的错误信息,导致调试困难。可以在开发环境中暂时禁用错误边界,或者使用 React 的严格模式来帮助发现潜在的问题。
  • 生产环境:在生产环境中,错误边界是保证应用稳定性的重要手段,要确保错误边界组件能够正常工作,并且展示友好的错误信息给用户。

除了错误边界,还有哪些方式可以处理 React 组件中的错误?

除了错误边界,在 React 组件中处理错误还有以下几种常见方式:

1. 内联 try...catch 语句

在组件的函数体中使用 try...catch 语句来捕获同步代码块中的错误。它适合处理组件内部特定逻辑中可能出现的错误。

import React from 'react';const MyComponent = () => {try {// 模拟可能出错的操作,这里故意除零const result = 1 / 0; return <div>计算结果: {result}</div>;} catch (error) {return <div>出现错误: {error.message}</div>;}
};export default MyComponent;

这种方式能精确控制特定代码块的错误处理,但只适用于同步代码,对于异步操作需要额外处理。

2. Promise.catch() 方法

当组件中使用异步操作(如 fetch 请求、Promise 等)时,可使用 .catch() 方法来捕获异步操作中的错误。

import React, { useEffect, useState } from 'react';const MyAsyncComponent = () => {const [data, setData] = useState(null);const [error, setError] = useState(null);useEffect(() => {const fetchData = async () => {try {const response = await fetch('https://api.example.com/data');if (!response.ok) {throw new Error('请求失败');}const jsonData = await response.json();setData(jsonData);} catch (err) {setError(err.message);}};fetchData();}, []);if (error) {return <div>错误: {error}</div>;}if (data) {return <div>数据: {JSON.stringify(data)}</div>;}return <div>加载中...</div>;
};export default MyAsyncComponent;

这里使用 try...catch 包裹异步操作,在 catch 块中处理请求可能出现的错误,将错误信息存储在状态里并显示给用户。

3. 全局错误处理

可以通过 window.onerrorwindow.addEventListener('error') 来捕获整个页面中的 JavaScript 错误,不过这并非专门针对 React 组件,但能捕获 React 组件之外的错误。

// 在入口文件中添加
window.onerror = function (message, source, lineno, colno, error) {console.log('全局错误捕获:', message);// 可添加代码将错误信息发送到服务器return true; 
};

或者使用 addEventListener

window.addEventListener('error', (event) => {console.log('全局错误捕获:', event.message);// 可添加代码将错误信息发送到服务器
});

这种方式能捕获各种未被捕获的错误,但缺乏对错误来源的精确控制。

4. React Error Event(React 17 及以上)

在 React 17 及更高版本中,可以通过监听 windowerror 事件来捕获未处理的 React 错误。

import ReactDOM from 'react-dom/client';
import App from './App';const root = ReactDOM.createRoot(document.getElementById('root'));root.render(<React.StrictMode><App /></React.StrictMode>
);window.addEventListener('error', (event) => {console.log('React 错误捕获:', event.message);// 可添加代码将错误信息发送到服务器
});

此方法可以捕获未被其他方式处理的 React 错误,便于统一管理和监控。

5. 使用 useEffect 清理副作用时的错误处理

useEffect 的清理函数中可能会出现错误,可使用 try...catch 进行处理。

import React, { useEffect } from 'react';const MyEffectComponent = () => {useEffect(() => {const cleanup = () => {try {// 模拟清理时可能出错的操作throw new Error('清理出错');} catch (error) {console.log('清理副作用时出错:', error.message);}};return cleanup;}, []);return <div>组件内容</div>;
};export default MyEffectComponent;

这样能保证在组件卸载时,清理副作用的过程中出现的错误可以被捕获和处理。

相关文章:

React 中的错误边界(Error Boundaries),如何使用它们捕获组件错误

大白话React 中的错误边界&#xff08;Error Boundaries&#xff09;&#xff0c;如何使用它们捕获组件错误 在 React 里&#xff0c;错误边界就像是一个“小卫士”&#xff0c;专门负责在组件出现错误时挺身而出&#xff0c;避免整个应用因为一个小错误就崩溃掉。接下来我会详…...

往期项目shader着色器实践效果应用合集

1、管路混色 2、水管水流效果 3、水管流入到流完效果 4、加热冷却 两 色混色 示意 XX、毒蘑菇测试效果...

go-zero: sqlx 对timestamp 格式数据问题

1.问题背景 对于goctl自动生成的model代码文件&#xff0c;对于非null的时间数据列&#xff0c;一定会产生如下问题 deleted_at\": unsupported Scan, storing driver.Value type \u003cnil\u003e into type *time.Time" 例如以上的问题&#xff0c;不论是插入还…...

systemd-networkd 的 *.network 配置文件详解 笔记250323

systemd-networkd 的 *.network 配置文件详解 笔记250323 查看官方文档可以用 man systemd.network命令, 或访问: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html 名称 systemd.network — 网络配置 概要 network.network 描述 一个纯…...

Axure项目实战:智慧城市APP(四)医疗信息(动态面板、选中交互应用)

亲爱的小伙伴&#xff0c;在您浏览之前&#xff0c;烦请关注一下&#xff0c;在此深表感谢&#xff01; 课程主题&#xff1a;智慧城市APP医疗信息模块 主要内容&#xff1a;医疗信息模块原型设计与交互 应用场景&#xff1a;医疗信息行业 案例展示&#xff1a; 案例视频&…...

机器学习正则化技术:Ridge、Lasso与ElasticNet全解析

机器学习中的正则化技术 在机器学习中&#xff0c;正则化技术&#xff08;如 Ridge 和 Lasso&#xff09;主要用于解决过拟合问题&#xff0c;通过限制模型复杂度提高泛化能力。以下是详细说明及实例代码&#xff1a; 一、正则化解决的问题 过拟合&#xff1a;模型在训练集表…...

【汽车传感系统架构:借助传感获取安全】

为了将车辆自动化提升到一个新的水平&#xff0c;设计人员研究了 LiDAR 等传感器选项的权衡&#xff0c;并着眼于传感系统架构。 本文引用地址&#xff1a;https://www.eepw.com.cn/article/202503/468584.htm 每年&#xff0c;约有 120 万人死于道路交通事故&#xff0c;还有…...

3.25-2request库

request库 一、介绍request库 &#xff08;1&#xff09;requests是用python语言编写的简单易用的http库&#xff0c;用来做接口测试的库&#xff1b; &#xff08;2&#xff09;接口测试自动化库有哪些&#xff1f; requests、urllib 、urllib2、urllib3、 httplib 等&…...

LangChain4j(1):初识LangChain4j

1 什么是LangChain和LangChain4j LangChain是一个大模型的开发框架&#xff0c;使用LangChain框架&#xff0c;程序员可以更好的利用大模型的能力&#xff0c;大大提高编程效率。如果你是一个lava程序员&#xff0c;那么对LangChain最简单直观的理解就是&#xff0c;LangChain…...

UMI-OCR Docker 部署

额外补充 Docker 0.前置条件 部署前&#xff0c;请检查主机的CPU是否具有AVX指令集 lscpu | grep avx 输出如下即可继续部署 Flags: ... avx ... avx2 ... 1.下载dockerfile wget https://raw.githubusercontent.com/hiroi-sora/Umi-OCR_runtime_linux/main/Do…...

python每日十题(9)

外存储器的容量一般都比较大&#xff0c;而且大部分可以移动&#xff0c;便于在不同计算机之间进行信息交流。外存储器中数据被读入内存储器后&#xff0c;才能被CPU读取&#xff0c;CPU不能直接访问外存储器。本题答案为A选项。 进程是指一个具有一定独立功能的程序关于某个数…...

Jenkins最新版,配置Gitee私人令牌和Gitee凭证

jenkins 配置Gitee私人令牌和凭证 jenkins 版本&#xff1a;Jenkins 2.492.2 Gitee配置 Jenkins配置gitee插件&#xff0c;需要先申请gitee私钥。 安装gitee插件 申请Gitee私人令牌&#xff0c;后面还需要添加凭证。 测试链接&#xff0c;并保存 配置凭证...

AI 生成内容(AIGC):从文本到视频的完整流程

近年来&#xff0c;AI 生成内容&#xff08;AIGC, AI-Generated Content&#xff09; 迅速发展&#xff0c;从文本、图片到音频、视频&#xff0c;AI 在创意内容生成方面展现出了惊人的能力。AIGC 不仅提升了内容创作效率&#xff0c;还降低了成本&#xff0c;使得普通用户也能…...

【漏洞复现】Apache Tomcat partial PUT文件上传反序列化漏洞复现(CVE-2025-24813)

❤️博客主页&#xff1a; iknow181 &#x1f525;系列专栏&#xff1a; 网络安全、 Python、JavaSE、JavaWeb、CCNP &#x1f389;欢迎大家点赞&#x1f44d;收藏⭐评论✍ 0x00 免责声明 本文所述漏洞复现方法仅供安全研究及授权测试使用&#xff1b;任何个人/组织须在合法合规…...

Spring JDBC Template与事务管理:基于XML与注解的实战指南

摘要 本文深入解析Spring JDBC Template与事务管理的核心技术&#xff0c;结合XML配置与注解方式两种主流方案&#xff0c;通过转账案例完整演示数据库操作与事务管理的最佳实践。文章涵盖JDBC Template的核心用法、事务配置语法、常见问题及性能优化建议&#xff0c;帮助开发…...

自动化测试selenium(Java版)

1.准备工作 1.1.下载浏览器 自动化测试首先我们要准备一个浏览器,我们这里使用谷歌(chrome)浏览器. 1.2.安装驱动管理 每一个浏览器都是靠浏览器驱动程序来启动,但是浏览器的版本更新非常快,可能我们今天测试的是一个版本,第二天发布了一个新的版本,那么我们就要重构代码,很…...

【13】Ajax爬取案例实战

目录 一、准备工作 二、爬取目标 三、初步探索&#xff1a;如何判断网页是经js渲染过的&#xff1f; 四、爬取列表页 4.1 分析Ajax接口逻辑 4.2 观察响应的数据 4.3 代码实现 &#xff08;1&#xff09;导入库 &#xff08;2&#xff09;定义一个通用的爬取方法…...

tar包部署rabbitMQ

部署erlang&#xff1a; 有网使用&#xff1a; sudo apt-get update sudo apt-get install libncurses5-dev libncursesw5-dev sudo yum install ncurses-devel 无网使用 tar zxvf ncurses.tar.gz mkdir ncurses cd ncurses-6.3/ ./configure --with-shared --without-debu…...

SpringMVC请求与响应深度解析:从核心原理到高级实践

一、SpringMVC架构与核心组件剖析 SpringMVC是基于Java的MVC设计模型实现的轻量级Web框架&#xff0c;其核心架构围绕前端控制器模式构建。以下是核心组件及其作用&#xff1a; DispatcherServlet 作为前端控制器&#xff0c;所有请求首先到达此处。它负责请求分发、协调组件协…...

CentOS 8 安装 Redis 全流程指南:从基础部署到远程安全配置

一、环境准备 本文以 CentOS 8.5 为例&#xff0c;演示 Redis 的安装、密码设置及远程连接配置。在开始前&#xff0c;请确保&#xff1a; 已通过 SSH 连接至服务器&#xff08;建议使用 Root 权限&#xff09;系统已联网基础工具包已安装&#xff1a;sudo dnf update -y &am…...

【机器学习】使用Python Spark MLlib进行预测模型训练

Spark MLlib 是 Spark 的机器学习 (ML) 库。它的目标是使实用的机器学习变得可扩展且易于使用。从高层次上讲&#xff0c;它提供了以下工具&#xff1a; ML 算法&#xff1a;常见的学习算法&#xff0c;如分类、回归、聚类和协同过滤特征化&#xff1a;特征提取、转换、降维和…...

简单聊聊Oracle和MySQL数据库的区别和使用场景

对于IT的技术人员&#xff0c;MySQL是非常熟悉的开源数据库&#xff0c;在各个行业被广泛应用。但是对于Oracle数据库&#xff0c;很多专业的IT从业人员不太了解&#xff0c;今天就来聊一聊Oracle和MySQL的一些区别。 1. 使用场景 首先MySQL是在各种IT公司或者非IT公司广泛应用…...

qt QOffscreenSurface详解

1、概述 QOffscreenSurface 是 Qt 中用于离屏渲染的一个类。它允许在不直接与屏幕交互的情况下进行 OpenGL 渲染操作&#xff0c;常用于生成纹理、预渲染场景等。通过 QOffscreenSurface&#xff0c;可以在后台创建一个渲染表面&#xff0c;进行绘制操作&#xff0c;并将结果捕…...

【软件测试】:软件测试实战

1. ⾃动化实施步骤 1.1 编写web测试⽤例 1.2 ⾃动化测试脚本开发 common public class AutotestUtils {public static EdgeDriver driver;// 创建驱动对象public static EdgeDriver createDriver(){// 驱动对象已经创建好了 / 没有创建if( driver null){driver new EdgeDr…...

springboot使用netty做TCP客户端

1、服务端文档说明 ## 1. 概述本文档描述了Socket模拟器的通信协议实现细节&#xff0c;包括数据包格式、字节序、编码方式等信息。## 2. 通信基础### 2.1 连接方式 - 协议类型&#xff1a;TCP - 网络层&#xff1a;IPv4 (AddressFamily.InterNetwork) - 传输方式&#xff1a;流…...

【NLP 49、提示工程 prompt engineering】

目录 一、基本介绍 语言模型生成文本的基本特点 提示工程 prompt engineering 提示工程的优势 使用注意事项 ① 安全问题 ② 可信度问题 ③ 时效性与专业性 二、应用场景 能 ≠ 适合 应用场景 —— 百科知识 应用场景 —— 写文案 应用场景 —— 解释 / 编写…...

Axure RP设计软件中的各种函数:包括数字、数学、字符串、时间及中继器函数,详细解释了各函数的用途、参数及其应用场景。

文章目录 引言函数分类数字函数数学函数字符串函数时间函数函数中继器函数引言 在axure交互设计时,函数可以用在条件公式和需要赋值的地方,其基本语法是用双方括号包含,变量值和函数用英文句号连接。 在交互事件编辑器中通过fx按钮插入函数表达式,例如设置文本内容为: …...

Logback使用和常用配置

Logback 是 Spring Boot 默认集成的日志框架&#xff0c;相比 Log4j&#xff0c;它性能更高、配置更灵活&#xff0c;并且天然支持 Spring Profile 多环境配置。以下是详细配置步骤及常用配置示例。 一、添加依赖&#xff08;非 Spring Boot 项目&#xff09; 若项目未使用 Sp…...

赛季7靶场 -- Code -- HTB writeup(Just hint)

本系列仅说明靶场的攻击思路&#xff0c;不会给出任何的详细代码执行步骤&#xff0c;因为个人觉得找到合适的工具以实现攻击思路的能力也非常重要。 1.首先我们对靶场进行了Nmap扫描&#xff0c;很快我们发现了Web应用端口何SSH端口 2.显然我们无法直接突破ssh&#xff0c;因为…...

第十三届蓝桥杯单片机省赛程序设计试题

目录 试题 各程序块代码 init.c main.c other.h other.c key.c seg.c onewire.c部分 ds1302.c部分 试题 各程序块代码 init.c #include "other.h"void init74hc138(unsigned char n){P2(P2&0x1f)|(n<<5);P2&0x1f; } void init(){P00x00;in…...

【QT】Qt creator快捷键

Qt creator可以通过以下步骤快捷键査看调用关系&#xff1a; 1.打开代码文件。 2.将光标放在你想要查看调用关系的函数名上。 3.按下键盘快捷键 CtrlshiftU。 4.弹出菜单中选择“调用路径”或“被调用路径” 5.在弹出的窗口中可以查看函数的调用关系 折叠或展开代码快捷键&…...

Flask接口开发--GET接口

安装Flask 1.安装命令&#xff1a; pip3 install Flask2.查看Flask版本&#xff1a; pip3 show flask如图我的Flask版本号是2.0.3 项目创建 1、在PyCharm中&#xff0c;我们点击左上方的 file&#xff0c;选择 New Project&#xff0c;创建一个Flask项目。&#xff08;Py…...

爬虫豆瓣电影

以下是一个简单的使用 requests 和 BeautifulSoup 库来爬取网页标题的 Python 爬虫示例代码&#xff0c;以爬取豆瓣电影 Top250 首页为例&#xff08;注意遵守网站的 robots.txt 协议&#xff0c;不要过度爬取给网站造成负担&#xff09;&#xff1a; 首先确保你已经安装了 re…...

[ ] 前后端连接 结合常见故障场景和解决

调试流程图&#xff1a; 一、基础网络检查 IP与端口验证 确认前端请求的URL与后端实际运行的IP和端口完全一致&#xff08;如http://192.168.1.100:8080/api&#xff09;使用ping命令测试网络连通性&#xff0c;telnet检查端口是否开放&#xff1a; telnet 192.168.1.100 80…...

MyBatis-Plus 的加载及初始化

在 Spring Boot 启动过程中&#xff0c;MyBatis-Plus 的加载和初始化涉及多个阶段的工作。这些工作包括 MyBatis-Plus 自身的配置解析、Mapper 接口的扫描与注册、SQL 语句的动态注入以及底层 MyBatis 的初始化等。以下是对整个过程的详细分析&#xff1a; 1. Spring Boot 启动…...

LangChain开发(九)基于Rag实现文档问答

文章目录 关联阅读Rag是什么&#xff1f;Rag工作流索引&#xff08;Indexing&#xff09;检索和生成&#xff08;Retrieval and generation&#xff09; 文档问答实现流程代码实现 源码地址参考资料 关联阅读 LangChain开发&#xff08;一&#xff09;LangChain介绍和对话demo…...

Netty——TCP 粘包/拆包问题

文章目录 1. 什么是 粘包/拆包 问题&#xff1f;2. 原因2.1 Nagle 算法2.2 滑动窗口2.3 MSS 限制2.4 粘包的原因2.5 拆包的原因 3. 解决方案3.1 固定长度消息3.2 分隔符标识3.3 长度前缀协议3.3.1 案例一3.3.2 案例二3.3.3 案例三 4. 总结 1. 什么是 粘包/拆包 问题&#xff1f…...

探索抓包利器ProxyPin,实现手机APP请求抓包,支持https请求

以下是ProxyPin的简单介绍&#xff1a; - ProxyPin是一个开源免费HTTP(S)流量捕获神器&#xff0c;支持 Windows、Mac、Android、IOS、Linux 全平台系统- 可以使用它来拦截、检查并重写HTTP(S)流量&#xff0c;支持捕获各种应用的网络请求。ProxyPin基于Flutter开发&#xff0…...

【例3.5】位数问题(信息学奥赛一本通-1313)

【题目描述】 在所有的N位数中&#xff0c;有多少个数中有偶数个数字3?由于结果可能很大&#xff0c;你只需要输出这个答案对12345取余的值。 【输入】 读入一个数N(N≤1000)。 【输出】 输出有多少个数中有偶数个数字3。 【输入样例】 2 【输出样例】 73 【题解代码】 #incl…...

python之selenium中的窗口切换

前提&#xff1a;触发一个事件打开一个新的窗口 1&#xff0c;先获取所有的句柄&#xff1a; handles driver.windowhandlers2&#xff0c;获取当前窗口 cururl driver.current_url3&#xff0c;循环遍历所有句柄 for handle in handles:driver.switch_to.window(handle)i…...

青少年编程与数学 02-011 MySQL数据库应用 20课题、连接与ORM

青少年编程与数学 02-011 MySQL数据库应用 20课题、连接与ORM 一、数据库连接基本概念连接过程连接状态连接池技术 二、Go语言连接MySQL数据库安装MySQL驱动导入相关包建立数据库连接检查连接状态执行SQL操作查询操作插入操作更新操作删除操作 完整示例 三、Python语言连接MySQ…...

Java 大视界 -- 基于 Java 的大数据分布式系统的监控与运维实践(155)

&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎来到 青云交的博客&#xff01;能与诸位在此相逢&#xff0c;我倍感荣幸。在这飞速更迭的时代&#xff0c;我们都渴望一方心灵净土&#xff0c;而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识&#xff0c;也…...

三维空间中点、线、面的关系

三维空间中点、线、面的关系 点相对于平面的位置关系直线相对于平面的位置关系1.根据三点计算平面方程 //根据3点计算平面方程#include <iostream> #include <cmath> #include <vector>...

Spring JdbcTemplate 万字详解(通俗易懂)

目录 Δ前言 一、什么是JdbcTemplate&#xff1f; 1.定义&#xff1a; 2.作用&#xff1a; 3.环境搭建&#xff1a; 二、JdbcTemplate的简单使用 1.通过JdbcTemplate实现数据的添加&#xff1a; 2.通过JdbcTemplate实现数据的修改&#xff1a; 三、JdbcTemplate的进阶使用 …...

centos 7 搭建ftp 基于虚拟用户用shell脚本搭建

#!/bin/bash# 步骤1: 更新系统并安装vsftpd yum update -y yum install vsftpd -y# 步骤2: 创建虚拟用户信息文件并转换为数据库文件 cat << EOF > /etc/vsftpd/virtual_users.txt ftpvuser 123456 EOFdb_load -T -t hash -f /etc/vsftpd/virtual_users.txt /etc/vsft…...

《Android低内存设备性能优化实战:深度解析Dalvik虚拟机参数调优》

1. 痛点分析&#xff1a;低内存设备的性能困局 现象描述&#xff1a;大应用运行时频繁GC导致卡顿 根本原因&#xff1a;Dalvik默认内存参数与硬件资源不匹配 解决方向&#xff1a;动态调整堆内存参数以平衡性能与资源消耗 2. 核心调优参数全景解析 关键参数矩阵&#xff1…...

【AI学习】概念了解

1,GPU 专门用于处理图形相关运算任务的微处理器,它起初主要聚焦于加速图形渲染,让计算机能够快速、流畅地显示高质量的图像、视频以及 3D 场景等内容,在电脑游戏、影视特效制作、动画设计等领域有着至关重要的作用。 与传统的中央处理器(CPU)相比,GPU 有着数量众多的核…...

WPF InkCanvas 控件详解

1. InkCanvas 是什么? InkCanvas 是 WPF 提供的一个手写绘图控件,它允许用户使用鼠标、触摸屏或手写笔在界面上进行绘图、标注等操作。 核心特点: ✅ 具备笔迹存储和管理功能。 ✅ 提供 Children 和 Strokes 两个集合,分别用于管理子控件和绘制的笔迹。 ✅ 通过 EditingM…...

数据库三级选择题(2)

C) 分布式数据库的事务管理包括恢复控制和并发控制&#xff0c;恢复控制一般采用的策略是基于两阶段提交协议 采用一定的计算方法定位数据的有 Ⅳ&#xff0e;散列&#xff08;哈希&#xff09;索引 下列提供逻辑独立性的是外模式/模式映像 UML所有活动有关判断的部分要用菱形表…...

ShapeCrawler:.NET开发者的PPTX操控魔法

引言 在当今的软件开发领域&#xff0c;随着数据可视化和信息展示需求的不断增长&#xff0c;处理 PPTX 文件的场景日益频繁。无论是自动化生成报告、批量制作演示文稿&#xff0c;还是对现有 PPT 进行内容更新与格式调整&#xff0c;开发者都需要高效的工具来完成这些任务。传…...