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

react 常用钩子 hooks 总结

文章目录

          • React钩子概念图
            • 状态管理钩子 state management
            • 副作用钩子 effect hooks
            • 引用钩子 Ref hooks
            • 上下文钩子
            • 其他钩子
            • 过渡钩子 处理过渡效果
            • 性能优化钩子 performance hooks
            • React 19 新钩子


React钩子概念图
状态管理钩子 state management

useState useReducer useSyncExternalStore

useState 最常用钩子

const [value, setValue] = useState('')
const handleChange = (e) => {setValue(e.target.value)
}
<input type="text" value = {value} onChange = {handleChange}></input>
#捕获用户输入值的变化
import React, { useState } from 'react';function ToggleComponent() {const [isVisible, setIsVisible] = useState(false);return (<><button onClick={() => setIsVisible(!isVisible)}>Toggle</button>{isVisible && <div>Content to Show/Hide</div>}</>);
}export default ToggleComponent;
# 控制显隐

useReducer 管理更为复杂状态的钩子

在一个reducer函数内管理状态

import React, { useReducer } from 'react';// Reducer 函数
const reducer = (state, action) => {switch (action) {case 'increment':return state + 1;default:return state; // 默认返回当前状态}
};function Counter() {const [count, dispatch] = useReducer(reducer, 0);return (<><p>Count: {count}</p><button onClick={() => dispatch('increment')}>Increment</button></>);
}export default Counter;

这个其实有点类似 Vue 的 vuex 两者设计思想类似 学过这两种语言的应该会有感受

相似点

  1. 状态定义
    • useReducer 中,初始状态通过 useReducer(reducer, initialState) 定义。
    • 在 Vuex 中,初始状态通过 state 属性定义。
  2. 状态更新逻辑
    • useReducer 中,reducer 函数负责根据 action 计算新的状态。
    • 在 Vuex 中,mutations 是唯一可以修改状态的地方,类似于 reducer
  3. 触发状态更新
    • useReducer 中,通过 dispatch(action) 触发状态更新。
    • 在 Vuex 中,通过 commit('mutation')dispatch('action') 触发状态更新。
  4. 集中化管理
    • 两者都提供了一种集中化的方式管理状态,避免了组件内部直接操作状态的混乱。

代码对比

React useReducer

import React, { useReducer } from 'react';const initialState = 0;// Reducer 函数
const reducer = (state, action) => {switch (action.type) {case 'increment':return state + 1;case 'decrement':return state - 1;default:return state;}
};function Counter() {const [count, dispatch] = useReducer(reducer, initialState);return (<><p>Count: {count}</p><button onClick={() => dispatch({ type: 'increment' })}>Increment</button><button onClick={() => dispatch({ type: 'decrement' })}>Decrement</button></>);
}export default Counter;

Vuex Store

// Vuex store
const store = new Vuex.Store({state: {count: 0,},mutations: {increment(state) {state.count++;},decrement(state) {state.count--;},},actions: {increment({ commit }) {commit('increment');},decrement({ commit }) {commit('decrement');},},
});// Vue 组件
<template><div><p>Count: {{ count }}</p><button @click="increment">Increment</button><button @click="decrement">Decrement</button></div>
</template><script>
export default {computed: {count() {return this.$store.state.count;},},methods: {increment() {this.$store.dispatch('increment');},decrement() {this.$store.dispatch('decrement');},},
};
</script>

主要区别

特性React useReducerVuex
作用范围适用于单个组件或父子组件间的状态管理适用于全局状态管理(跨多个组件)
触发方式dispatch(action)commit('mutation')dispatch('action')
是否支持异步操作不直接支持,需要结合其他工具(如 useEffect支持异步操作(通过 actions
模块化需要手动组织代码结构提供模块化支持(modules
学习曲线较低,适合小型到中型应用较高,适合中大型应用
import React, { useReducer } from 'react';// 初始状态
const initialState = { email: '', password: '' };//初始值由 initialState 定义:{ email: '', password: '' }。// Reducer 函数
// 它接收一个 action 对象(通常包含 type 和可选的 payload),并将这个 action 传递给 reducer。
// reducer 根据 action.type 和 action.payload 计算并返回新的状态。
const reducer = (state, action) => {switch (action.type) {case 'SET_EMAIL':return {...state,email: action.payload,};case 'SET_PASS':return {...state,password: action.payload,};default:return state;}
};function LoginForm() {const [state, dispatch] = useReducer(reducer, initialState); // state 是当前的状态对象,在这里它是一个包含 email 和 password 的对象。//每次调用 dispatch 时,state 会根据 reducer函数 的逻辑更新为新的值。return (<form>{/* 绑定 email 输入框 */}<inputtype="email"value={state.email}onChange={(e) => {dispatch({ type: 'SET_EMAIL', payload: e.target.value });}}placeholder="Enter email"/>{/* 绑定 password 输入框 */}<inputtype="password"value={state.password}onChange={(e) => {dispatch({ type: 'SET_PASS', payload: e.target.value });}}placeholder="Enter password"/>{/* 显示当前状态 */}<p>Email: {state.email}</p><p>Password: {state.password}</p></form>);
}export default LoginForm;

useSyncExternalStore 很少用 将非react状态钩子存储到react中

副作用钩子 effect hooks

useEffect useLayoutEffect useInsertionEffect

const [count, setCount] = useState(0)useEffect(() => {document.title = `You clicked ${count} times`
},[count])
//给 useEffect  提供一个运行函数  传入依赖项数组 依赖项数组变化时函数运行<button onClick={() => setCount(count + 1)}>Click Me</button>

副作用函数一般有两种 比如事件驱动副作用 点击按钮等事件 第二种 渲染驱动副作用 页面渲染后运行 调取接口

const ref = useRef(null)useEffect(() => {if(isPlaying){ref.current.play()}else{ref.current.pause()}
},[isPlaying])<video ref={ref} src={src} loop playsInline />

useLayoutEffect react 绘制后运行

useEffect 异步执行 钩子不会阻塞浏览器绘制(paint),这意味着它会在浏览器完成渲染后异步执行。这是最常用的副

作用钩子,适用于大多数情况,比如数据获取、订阅或者手动DOM更新等。

useLayoutEffect 会在所有的 DOM 变更之后同步执行。这可以保证在任何浏览器绘制之前,所有的 DOM 操作已经完成。因此,如果

你的副作用涉及到 DOM 操作,并且这些操作会影响到页面的布局或视觉效果,你应该使用 useLayoutEffect 来避免闪烁或其他视觉问

题。

const ref = useRef(null)
const [tooltipHeight, setTooltipHeight] = useState(0)useLayoutEffect(() => {const {height} = ref.current.getBoundingClientRect()setTooltipHeight(height)
},[])

useInsertionEffect 在渲染过程中插入样式 它可以让你在组件渲染之前插入样式定义,从而避免样式闪烁或未定义样式的问题。很少使

引用钩子 Ref hooks

useRef useImperativeHandle

useRef 访问dom实例 ref.current

const [timer, setTimer] = useState(0);
const intervalRef = useRef();
//启动计时器函数
const startTimer = () => {intervalRef.current = setInterval(() => {setTimer((prevTimer) => prevTimer + 1);}, 1000);
};
//startTimer 函数通过 setInterval 每隔 1 秒调用一次回调函数,该回调函数将 timer 状态增加 1。
//intervalRef.current 存储了 setInterval 返回的定时器 ID,以便稍后可以停止计时器。
// 停止计时器
const stopTimer = () => {clearInterval(intervalRef.current);
};<p>Timer: {timer} seconds</p>
<button onClick={startTimer}>Start Timer</button>
<button onClick={stopTimer}>Stop Timer</button>

useImperativeHandle 也是一种引用钩子 很少使用 当你需要在父组件中操作子组件的某些功能,但又不希望暴露整个子组件实例时。

父组件获取子组件输入框的焦点

父组件

import React, { useRef } from 'react';
import ChildComponent from './ChildComponent';function ParentComponent() {const childRef = useRef();const handleFocus = () => {childRef.current.focusInput();};const handleClear = () => {childRef.current.clearInput();};return (<div><ChildComponent ref={childRef} /><button onClick={handleFocus}>Focus Input</button><button onClick={handleClear}>Clear Input</button></div>);
}export default ParentComponent;

子组件

import React, { useRef, useImperativeHandle, forwardRef } from 'react';const ChildComponent = forwardRef((props, ref) => {const inputRef = useRef();// 自定义暴露的方法useImperativeHandle(ref, () => ({focusInput: () => {inputRef.current.focus();},clearInput: () => {inputRef.current.value = '';},}));return <input type="text" ref={inputRef} placeholder="Enter text" />;
});export default ChildComponent;

useImperativeHandle 定义了两个方法:

  • focusInput:让输入框获得焦点。

  • clearInput:清空输入框的内容。

  • 父组件只能调用这两个方法,而不能直接访问 inputRef 或其他内容。

  • useImperativeHandle 必须与 forwardRef 配合使用,因为只有 forwardRef 才能将 ref 传递到子组件。

上下文钩子

useContext

读取上下文值

//1 创建context
const AppContext = createContext()
//2 用Provider组件包裹
<AppContext.Provider value="你好"><App></App>      
</AppContext.Provider>
//3 useContext 获取值
function Title(){const text = useContext(AppContext)return <h1>{text}</h1>
}
其他钩子

useDebugValue useId

useDebugValue devtool调试用 很少使用

useId 创建唯一id 但不能用作key

function Form() {return (<form><EmailInput name="Email" /><EmailInput name="Confirm Email" /></form>);
}function EmailInput({ name }) {const id = useId();return (<><label htmlFor={id}>{name}</label><input id={id} type="email" /></>);
}
过渡钩子 处理过渡效果

useTransition

useDeferredValue

useTransition 指定状态更新 不紧急

const [filter, setFilter] = useState('');
const [inputValue, setInputValue] = useState('');
const [isPending, startTransition] = useTransition();const filteredItems = items.filter(item => item.includes(filter));<inputvalue={inputValue}onChange={(event) => {setInputValue(event.target.value);startTransition(() => {setFilter(event.target.value);});}}placeholder="Type to filter..."
/>
{isPending ? <p>Loading...</p> : filteredItems.map(item => <div key={item}>{item}</div>)}

useDeferredValue 延迟状态更新

性能优化钩子 performance hooks

useMemo useCallback

useMemo 提升性能 useMemo必须返回一个值

  • useMemo 是一个 React Hook,用于缓存计算结果,避免在每次渲染时都重新计算。
function SumComponent({ numbers }) {const sum = useMemo(() => {return numbers.reduce((total, n) => total + n, 0);}, [numbers]);return <h1>Sum: {sum}</h1>;
}
//接收一个数字数组 numbers 作为 props,并计算这些数字的总和。通过使用 useMemo,确保了只有在 numbers 发生变化时才重新计算总
//和,从而提高了组件的性能,避免了不必要的重复计算。
import React, { useMemo } from 'react';function SumComponent({ numbers }) {// 使用 useMemo 缓存计算结果const sum = useMemo(() => {console.log('Calculating sum...');return numbers.reduce((total, num) => total + num, 0);}, [numbers]); // 只有当 numbers 发生变化时才重新计算return (<div><h1>Sum: {sum}</h1></div>);
}export default function App() {const [numbers, setNumbers] = React.useState([1, 2, 3, 4, 5]);const [count, setCount] = React.useState(0);// 添加一个随机数到数组中const addRandomNumber = () => {setNumbers([...numbers, Math.floor(Math.random() * 100)]);};return (<div><h2>Current Count: {count}</h2><button onClick={() => setCount(count + 1)}>Increase Count</button><button onClick={addRandomNumber}>Add Random Number</button><SumComponent numbers={numbers} /></div>);
}

useCallback 缓存回调函数

function Counter() {const [count, setCount] = useState(0);const increment = useCallback(() => {setCount((c) => c + 1);}, []);return (<><div>{count}</div><Button onClick={increment} /></>);
}function Button({ onClick }) {return <button onClick={onClick}>Click me</button>;
}
React 19 新钩子

useFormStatus useFormState useOptimistic use

相关文章:

react 常用钩子 hooks 总结

文章目录 React钩子概念图状态管理钩子 state management副作用钩子 effect hooks引用钩子 Ref hooks上下文钩子其他钩子过渡钩子 处理过渡效果性能优化钩子 performance hooksReact 19 新钩子 React钩子概念图 状态管理钩子 state management useState useReducer useSyncEx…...

2025 年导游证报考条件新政策解读与应对策略

2025 年导游证报考政策有了不少新变化&#xff0c;这些变化会对报考者产生哪些影响&#xff1f;我们又该如何应对&#xff1f;下面就为大家详细解读新政策&#xff0c;并提供实用的应对策略。 最引人注目的变化当属中职旅游类专业学生的报考政策。以往&#xff0c;中专学历报考…...

重置 Git 项目并清除提交历史

在某些情况下&#xff0c;你可能需要完全重置一个 Git 项目&#xff0c;清除所有提交历史&#xff0c;然后将当前代码作为全新的初始提交。本文将详细介绍这个过程的操作步骤和注意事项。 重要警告 ⚠️ 注意&#xff1a;以下操作将永久删除项目的所有提交历史、分支和标签。…...

GitHub Copilot (Gen-AI) 很有用,但不是很好

摘要&#xff1a;以下是我在过去三个月中在实际 、 开发中使用 GitHub Copilot Pro 后的想法。由于技术发展迅速&#xff0c;值得注意的是&#xff0c;这些印象是基于我截至 2025 年 3 月的经验。 1 免费试用促使我订阅 GitHub Copilot Pro 我以前读过有关 AI 代码生成器的文…...

K8S Service 原理、案例

一、理论介绍 1.1、3W 法则 1、是什么&#xff1f; Service 是一种为一组功能相同的 pod 提供单一不变的接入点的资源。当 Service 存在时&#xff0c;它的IP地址和端口不会改变。客户端通过IP地址和端口号与 Service 建立连接&#xff0c;这些连接会被路由到提供该 Service 的…...

Base64编码原理:二进制数据与文本的转换技术

&#x1f504; Base64编码原理&#xff1a;二进制数据与文本的转换技术 开发者的数据编码困境 作为开发者&#xff0c;你是否曾遇到这些与Base64相关的挑战&#xff1a; &#x1f4ca; 需要在JSON中传输二进制数据&#xff0c;但不确定如何正确编码&#x1f5bc;️ 想要在HT…...

系统设计(1)—前端—CDN—Nginx—服务集群

简介&#xff1a; 本指南旨涵盖前端、CDN、Nginx 负载均衡、服务集群、Redis 缓存、消息队列、数据库设计、熔断限流降级以及系统优化等模块的核心要点。我们将介绍各模块常见的设计方案与优化策略&#xff0c;并结合电商秒杀、SaaS CRM 系统、支付系统等高并发场景讨论实践技巧…...

Easysearch 基础运维扫盲指南:从 HTTP 到 HTTPS、认证与安全访问全解析

Easysearch 基础运维扫盲指南&#xff1a;从 HTTP 到 HTTPS、认证与安全访问全解析 众所周知&#xff0c;原生 Elasticsearch 默认开启的是 HTTP 明文接口&#xff0c;并且不开启任何身份认证或传输加密。若想启用 TLS/SSL 加密及账号密码验证&#xff0c;通常需要配置繁琐的安…...

在Android中如何使用Protobuf上传协议

在 Android 中使用 Protobuf&#xff08;Protocol Buffers&#xff09;主要分为以下几个步骤&#xff1a; ✅ 1. 添加 Protobuf 插件和依赖 在项目的 build.gradle&#xff08;Project 级&#xff09;文件中添加 Google 的 Maven 仓库&#xff08;通常默认已有&#xff09;&am…...

【数据可视化艺术·应用篇】三维管线分析如何重构城市“生命线“管理?

在智慧城市、能源管理、工业4.0等领域的快速发展中&#xff0c;地下管线、工业管道、电力通信网络等“城市血管”的复杂性呈指数级增长。传统二维管理模式已难以应对跨层级、多维度、动态变化的管线管理需求。三维管线分析技术应运而生&#xff0c;成为破解这一难题的核心工具。…...

2025年的营销趋势-矩阵IP

从 2025 年的营销生态来看&#xff0c;创始人 IP 与智能矩阵的结合确实呈现出颠覆性趋势&#xff0c;这一现象背后隐藏着三个值得深度解析的商业逻辑&#xff1a; 一、创始人 IP 的本质是 "信任货币" 的数字化迁徙 当新能源汽车市场陷入参数混战&#xff0c;雷军将个…...

对接金蝶获取接口授权代码

接口服务信息 using RestSharp; using System.Configuration; using System.Threading.Tasks; public class KingdeeAccessTokenService { private readonly RestClient _client; private readonly KingdeeApiConfig _config; public KingdeeAccessTokenService() …...

探秘 3D 展厅之卓越优势,解锁沉浸式体验新境界

&#xff08;一&#xff09;打破时空枷锁&#xff0c;全球触达​ 3D 展厅的首要优势便是打破了时空限制。在传统展厅中&#xff0c;观众需要亲临现场&#xff0c;且必须在展厅开放的特定时间内参观。而 3D 展厅依托互联网&#xff0c;让观众无论身处世界哪个角落&#xff0c;只…...

prometheus通过Endpoints自定义grafana的dashboard模块

1、prometheus自定义的dashboard模块 文件路径/etc/prometheus/config_out/prometheus-env.yaml - job_name: serviceMonitor/monitoring/pfil/0honor_labels: falsekubernetes_sd_configs:- role: endpointsnamespaces:names:- monitoringrelabel_configs:- source_labels:- …...

java排序算法-计数排序

计数排序的思路 计数排序的基本思路&#xff1a; 确定取值范围&#xff1a; 遍历整个待排序的数组&#xff0c;确定数组中元素的取值范围&#xff0c;找到最小值和最大值。创建计数数组&#xff1a; 创建一个计数数组&#xff0c;其长度为取值范围的大小&#xff0c;用于统计…...

力扣-hot100(滑动窗口最大值)

239. 滑动窗口最大值 困难 给你一个整数数组 nums&#xff0c;有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回 滑动窗口中的最大值 。 示例 1&#xff1a; 输入&#xff1a;nums […...

每日c/c++题 备战蓝桥杯(P1049 [NOIP 2001 普及组] 装箱问题)

洛谷P1049 装箱问题题解&#xff1a;动态规划在背包问题中的经典应用 题目描述 P1049 装箱问题是一道典型的0-1背包问题变种。题目要求在给定箱子容量V和n个物品体积的情况下&#xff0c;选择若干物品装入箱子&#xff0c;使得箱子的剩余空间最小。最终输出这个最小剩余空间的…...

【尚硅谷Redis6】自用学习笔记

Redis介绍 Redis是单线程 多路IO复用技术&#xff08;类似黄牛买票&#xff09; 默认有16个库&#xff0c;用select进行切换 默认端口号为6379 Memcached&#xff1a;多线程 锁&#xff08;数据类型单一&#xff0c;不支持持久化&#xff09; 五大常用数据类型 Redis key …...

产品更新丨谷云科技ETLCloud V3.9.2版本发布

谷云科技 ETLCloud 集成平台迎来了每月一次的功能迭代&#xff0c;本月发布版本号为 3.9.2 版本&#xff0c;为用户带来了新的功能、优化改进以及问题修复&#xff0c;以下是详细介绍&#xff1a; 新增组件 本次更新新增了众多实用组件&#xff0c;涵盖了京东和 Shopify 相关…...

Promise并发控制与HTTP请求优化

Promise并发方法对比 #mermaid-svg-tnmGzOkgNUCrbvfI {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-tnmGzOkgNUCrbvfI .error-icon{fill:#552222;}#mermaid-svg-tnmGzOkgNUCrbvfI .error-text{fill:#552222;stroke…...

G1垃圾回收器中YoungGC和MixedGC的区别

在 G1 垃圾回收器中&#xff0c;Mixed GC 和 Young GC 的区别主要体现在以下几个方面&#xff1a; 作用范围 Young GC&#xff1a;仅针对年轻代中的Region进行回收&#xff0c;包括 Eden 区和 Survivor 区的 Region。Mixed GC&#xff1a;会回收所有年轻代的 Region 以及部分…...

Web4.0身份革命:去中心化身份系统的全栈实现路径

去中心化身份&#xff08;DID&#xff09;技术栈正在重构数字世界的信任根基&#xff0c;本文从密码学协议、存储网络、验证框架三个维度&#xff0c;解析符合W3C标准的身份系统构建方案。通过Hyperledger Aries架构实践&#xff0c;揭示如何实现跨链身份互通、数据主权控制、零…...

iOS/Flutter混合开发之PlatformView配置与使用

环境&#xff1a;Xcode 16.3、Flutter 3.29.2、Dart 3.7.2。 使用背景&#xff1a;需要在flutter界面中嵌入一个iOS原生控件。 步骤&#xff1a; 1. iOS侧实现&#xff1a; 1.1&#xff1a;PlatformView实现 class FLNativeView: NSObject, FlutterPlatformView {private v…...

Libconfig 修改配置文件里的某个节点

THCommandStatus ( { Status "1"; index 5; }, { Status "2"; index 8; }, { Status "3"; index 7; }, { Status "4"; index 0; } ); 比如这是配置文件的内容&#xff…...

【金仓数据库征文】_AI 赋能数据库运维:金仓KES的智能化未来

AI 赋能数据库运维&#xff1a;金仓KES的智能化未来 &#x1f31f;嗨&#xff0c;我是LucianaiB&#xff01; &#x1f30d; 总有人间一两风&#xff0c;填我十万八千梦。 &#x1f680; 路漫漫其修远兮&#xff0c;吾将上下而求索。 在当今数字经济飞速发展的时代&#xff0…...

【MySQL】3分钟解决MySQL深度分页问题

什么是深度分页问题&#xff1f;该如何解决呢?这篇文章展开讲讲 什么是深度分页&#xff1f; 当查询结果集非常大时&#xff0c;需要获取靠后页码的数据&#xff0c;比如第1000页、10000页。 如&#xff1a; SELECT * FROM table LIMIT 10000, 10; -- 获取第10001-10010条…...

GitHub 趋势日报 (2025年04月24日)

本日报由 TrendForge 系统生成 https://trendforge.devlive.org/ &#x1f4c8; 今日整体趋势 Top 10 排名项目名称项目描述今日获星总星数语言1kortix-ai/sunaSuna - Open Source Generalist AI Agent⭐ 1105⭐ 3639TypeScript2cloudcommunity/Free-CertificationsA curated …...

一种双模式机器人辅助股骨干骨折钢板植入方法

股骨干骨折是一种常见的高能损伤&#xff0c;微创内固定是首选治疗方法。然而&#xff0c;钢板植入过程中存在不可见、不准确和不稳定等问题。山东大学研究团队提出了一种双模式机器人辅助钢板植入方法&#xff0c;通过神经网络模型规划钢板植入轨迹&#xff0c;然后利用机械臂…...

全球碳化硅晶片市场深度解析:技术迭代、产业重构与未来赛道争夺战(2025-2031)

一、行业全景&#xff1a;从“材料突破”到“能源革命”的核心引擎 碳化硅&#xff08;SiC&#xff09;作为第三代半导体材料的代表&#xff0c;凭借其宽禁带&#xff08;3.26eV&#xff09;、高临界击穿场强&#xff08;3MV/cm&#xff09;、高热导率&#xff08;4.9W/cmK&…...

IDEA搭建环境的五种方式

一、普通的java项目 File--New--Project 选择Java&#xff0c;jdk选择1.8版本&#xff0c;然后点next 输入项目名和路径名&#xff0c;点击Finish 创建包结构&#xff0c;编写Class类 编写主方法&#xff0c;输出Hello标志完成 二、普通的javaWeb项目 Java Enterprise-- 勾选…...

隐形革命:环境智能如何重构“人-机-境“共生新秩序

引言 在万物互联的时代&#xff0c;环境智能&#xff08;Ambient Intelligence, AmI&#xff09;正以“隐形革命者”的姿态重塑人类生活场景。通过分布式传感器、边缘计算与自适应算法的深度融合&#xff0c;AmI构建出能感知、学习并响应人类行为的智慧环境。 本文基于多领域研…...

Mysql唯一性约束

唯一性约束&#xff08;Unique Constraint&#xff09;是数据库设计中用于保证表中某一列或多列组合的值具有唯一性的一种规则。它可以防止在指定列中插入重复的数据&#xff0c;有助于维护数据的完整性和准确性。下面从几个方面为你详细解释 作用 确保数据准确性&#xff1a…...

QuecPython+GNSS:实现快速定位

概述 QuecPython 结合 GNSS&#xff08;全球导航卫星系统&#xff09;模块为物联网设备提供开箱即用的定位能力解决方案。该方案支持 GPS/北斗/GLONASS/Galileo 多系统联合定位&#xff0c;为物联网开发者提供从硬件接入到云端服务的全栈式定位解决方案。 优势特点 多体系定…...

【从零开始:自制一个Java消息队列(MQ)】

&#x1f680; 从零开始&#xff1a;自制一个Java消息队列&#xff08;MQ&#xff09; 在现代分布式系统中&#xff0c;消息队列&#xff08;Message Queue&#xff0c;MQ&#xff09;已经成为一个至关重要的组件。它帮助系统在异步处理、负载均衡、解耦等方面提供了强大的支持…...

WHAT - 已阅读书单

指数基金投资指南✅ 我们终将变富 纳瓦尔宝典 围城✅ 许三观卖血记✅ 骆驼祥子✅ 活着 白鹿原✅ 百年孤独 君主论 阿Q正传✅ 蛤蟆先生去看心理医生✅ 思考&#xff0c;快与慢 三体✅ 人类简史&#xff1a;从动物到上帝✅ 明朝那些事✅ 三国演义✅ 中国历代政治得失✅ 资治…...

代码随想录算法训练营第60期第十七天打卡

今天我们继续进入二叉树的下一个章节&#xff0c;今天的内容我在写今天的博客前大致看了一下部分题目难度不算大&#xff0c;那我们就进入今天的题目。 第一题对应力扣编号为654的题目最大二叉树 这道题目的坑相当多&#xff0c;我第一次题目没有看明白就是我不知道到底是如何…...

C 语言数组详解

一、数组的基本概念 在 C 语言中&#xff0c;数组是一种相同数据类型元素的集合&#xff0c;这些元素在内存中连续存储。通过数组&#xff0c;我们可以用一个统一的名字来管理一组相关的数据&#xff0c;并且通过下标&#xff08;索引&#xff09;快速访问其中的每一个元素。例…...

ADVB协议同步

关于视频传输&#xff0c;有多种控制时序。协议标准允许设计者选择有限的几个速率的接口来满足 系统设计目标。例如&#xff0c;一些系统使用总线时序发送信息通过line-by-line;在这个案例中&#xff0c; 容器的sof作为vsync同步的点。horizontal line blanding将插入idles,ADV…...

基于LAB颜色空间的增强型颜色迁移算法

本文算法使用Grok完成所有内容&#xff0c;包含算法改进和代码编写&#xff0c;可大大提升代码编写速度&#xff0c;算法改进速度&#xff0c;提供相关idea&#xff0c;提升效率&#xff1b; 概述 本文档描述了一种基于LAB颜色空间的颜色迁移算法&#xff0c;用于将缩略图D的…...

复合材料高置信度 DIC 测量与高级实验技术研讨会邀请函

邀请函 2025年5月8日 上海 中国复合材料学会官网会议通知 您可以点击上方蓝字跳转官网查看官网信息 主办单位&#xff1a; 中国复合材料学会 协办单位&#xff1a; 研索仪器科技&#xff08;上海&#xff09;有限公司 数字图像相关技术&#xff08;Digital Image Correla…...

解决docker部署MySQL的max_allowed_packet 限制问题

报错 Error querying database. Cause: com.mysql.cj.jdbc.exceptions.PacketTooBigException: Packet for query is too large (2,471 > 2,048). You can change this value on the server by setting the max_allowed_packet variable. ### The error may exist in file …...

【XR手柄交互】Unity 中使用 InputActions 实现手柄控制详解(基于 OpenXR + Unity新输入系统(Input Actions))

摘要&#xff1a; 本文主要介绍如何使用 Input Actions&#xff08;Unity 新输入系统&#xff09; OpenXR 来实现 VR手柄控制&#xff08;监听ABXY按钮、摇杆、抓握等操作&#xff09;。 &#x1f3ae; Unity 中使用 InputActions 实现手柄控制详解&#xff08;基于 OpenXR 新…...

C++:继承机制详解

目录 一.继承的概念及定义 一&#xff09;.继承的概念 二&#xff09;.继承定义 1.定义格式 2.继承类型 3.继承类模板 二.基类和派生类间的转换 三.继承中的作用域 四.派生类的默认成员函数 一&#xff09;.4个常见默认成员函数 二&#xff09;.不可被继承的类 五…...

自然语言处理+知识图谱:智能导诊的“大脑”是如何工作的?

智能导诊系统定义与作用 智能导诊系统是一种基于人工智能技术的医疗辅助工具&#xff0c;旨在提高医疗服务效率、改善患者就医体验、降低医院运营成本&#xff0c;通过自然语言处理技术&#xff0c;智能导诊系统能够自动回答患者的常见问题&#xff0c;帮助患者快速了解自己的…...

论文阅读笔记——ZeroGrasp: Zero-Shot Shape Reconstruction Enabled Robotic Grasping

ZeroGrasp 论文 多视角重建计算大、配置复杂&#xff0c;本文将稀疏体素重建&#xff08;快且效果好&#xff09;引入机器人抓取且只考虑单目重建&#xff0c;通过利用基于物理的接触约束与碰撞检测&#xff08;这对精确抓取至关重要&#xff09;&#xff0c;提升三维重建质量将…...

Qt 调试信息重定向到本地文件

1、在Qt软件开发过程中&#xff0c;我们经常使用qDebug()输出一些调试信息在QtCreator终端上。 但若将软件编译、生成、打包为一个完整的可运行的程序并安装在系统中后&#xff0c;系统中没有QtCreator和编译环境&#xff0c;那应用程序出现问题&#xff0c;如何输出信息排查…...

Android Studio开发中Application和Activity生命周期详解

文章目录 Application生命周期Application生命周期概述Application关键回调方法onCreate()onConfigurationChanged()onLowMemory()onTrimMemory()onTerminate() Application生命周期管理最佳实践 Activity生命周期Activity生命周期概述Activity生命周期回调方法onCreate()onSta…...

vite+vue2+elementui构建之 package.json

webpack版本太低&#xff0c;构建依赖太多&#xff0c;头大。 各种查阅资料&#xff0c;弄了一份直通构建vite构建elementUi核心文件&#xff0c; 构建基于开源若依vue2vue3版本改造&#xff0c;感谢开源&#xff0c;感谢若依。 vitevue2elementui构建之 vite.config.js-CSD…...

安全编排自动化与响应(SOAR):从事件响应到智能编排的技术实践

安全编排自动化与响应&#xff08;SOAR&#xff09;&#xff1a;从事件响应到智能编排的技术实践 在网络安全威胁复杂度指数级增长的今天&#xff0c;人工处理安全事件的效率已难以应对高频攻击&#xff08;如日均万级的恶意IP扫描&#xff09;。安全编排自动化与响应&#xf…...

《Keras 3 :使用 TFServing 提供 TensorFlow 模型》

《Keras 3 :使用 TFServing 提供 TensorFlow 模型》 作者:Dimitre Oliveira 创建日期:2023/01/02 最后修改时间:2023/01/02 描述:如何使用 TensorFlow Serving 为 TensorFlow 模型提供服务。 (i) 此示例使用 Keras 3 在 Colab 中查看 GitHub 源 介绍 构建机器学习模…...