react国际化配置react-i18next详解
react PC端项目构建TS,react@18.2.0+antd+vite+axios+redux+sass+ts 完整版代码下载:
https://download.csdn.net/download/randy521520/88922625
react PC端项目构建,react@18.2.0+antd+vite+axios+redux+sass完整版代码下载:
https://download.csdn.net/download/randy521520/88922569
react移动端项目构建TS,react@18.2.0+react-vant+vite+axios+redux+sass+ts完整版代码下载:
https://download.csdn.net/download/randy521520/88917557
react移动端项目构建,react@18.2.0+react-vant+vite+axios+redux+sass完整版代码下载:
https://download.csdn.net/download/randy521520/88917543
一、简介
react-i18next 是一个用于在 React 应用中实现国际化(Internationalization,简称 i18n)的库,它是基于 i18next 的 React 封装版本。国际化是指将应用程序设计成能够适应不同语言和文化习惯的过程,使得应用能够在不同地区和语言环境下使用。
react-i18next 提供了一种简单且强大的方式来实现 React 应用的国际化,它支持以下主要特性:
1.多语言支持: 可以轻松地在应用中集成多种语言的支持,使用户能够切换不同的语言版本。
2.文本翻译: 可以通过配置文件或者 API 来管理应用中的文本内容,实现文本的国际化翻译。
3.变量替换: 支持在翻译文本中插入变量,以便动态替换内容。
4.Pluralization(复数处理): 提供了复数形式处理的功能,以适应不同语言的复数规则。
5.Context(上下文)支持: 可以根据不同的上下文环境加载不同的翻译内容。
6.React Hooks 和 Higher-Order Components(HOC): 提供了方便的 React Hooks 和 HOC,使得在 React 组件中使用国际化变得更加简单。
二、配置国际化,需安装react-i18next、i18next
1.lang.js
import i18n from "i18next";
import { initReactI18next } from "react-i18next";//英文配置
const enConfig ={ok: 'OK',
};//中文配置
let zhConfig = {ok: '确定',
};//切换语言
export const changeLanguage = (events)=>{const lang = events.target.value;i18n.changeLanguage(lang)
};const resources = {'zh_CN': {translation: zhConfig,},'en': {translation: enConfig,},
};i18n.use(initReactI18next).init({resources,lng: 'zh_CN',fallbackLng: 'zh_CN',interpolation: {escapeValue: false,},
});export default i18n;
2.main.jsx
import ReactDOM from "react-dom/client";
import {BrowserRouter} from "react-router-dom";
import App from "./App.jsx";
import "@lang/lang.js";ReactDOM.createRoot(document.getElementById('root')).render(<BrowserRouter><App /></BrowserRouter>,
)
3.使用
import {useTranslation} from "react-i18next";const Home = () => {const {t} = useTranslation()return (<>{t('ok')}</>)
}export default Home;

三、i18next相关API
1.i18next.use(module):将其他插件加载到 i18next。
2.i18next.init(options, callback):初始化国际化配置
- options:配置项
debug:控制台输出信息的调试级别。用于查找加载问题。
resources:初始化时使用的资源(如果不使用加载或不使用addResourceBundle进行附加)。
partialBundledLanguages:允许在使用后端加载非捆绑资源的同时使用捆绑资源进行初始化。
lng:要使用的语言(覆盖语言检测)。
fallbackLng:如果用户语言的翻译不可用,则使用的语言。
supportedLngs:允许的语言数组。
nonExplicitSupportedLngs:如果为true,将传递例如en-US,如果在supportedLngs中找到en。
load:要查找的语言代码,给定设置语言为'en-US':'all' --> ['en-US','en','dev'],'currentOnly' --> 'en-US','languageOnly' --> 'en'。
preload:要预加载的语言数组。在服务器端很重要,以确保在呈现视图之前加载翻译。
lowerCaseLng:语言将转换为小写,例如en-US --> en-us。
cleanCode:将语言转换为小写,EN --> en,同时保留完整的区域设置,如en-US。
ns:要加载的命名空间的字符串或数组。
defaultNS:如果未传递给翻译函数的默认命名空间。
fallbackNS:如果在给定命名空间中找不到键,则查找键的字符串或数组。
saveMissing:如果未找到键,则在后端调用保存缺失键功能。
saveMissingPlurals:如果未找到键,也为复数形式调用后端的保存缺失键功能。
updateMissing:启用以使用saveMissing更新默认值(仅在defaultValue与翻译值不同的情况下起作用)。
saveMissingTo:在使用saveMissing功能时不返回键作为默认值。
missingKeyNoValueFallbackToKey:用于自定义缺失键处理(需要将saveMissing设置为true)。
parseMissingKeyHandler:接收在't()'中未找到的键并返回一个值,该值将被't()'返回。
appendNamespaceToMissingKey:将命名空间附加到缺失键。
missingInterpolationHandler:在插值值未定义时调用。如果值为空字符串或null,则不会调用此方法。
simplifyPluralSuffix:对于只有1个复数形式的语言,将使用'plural'作为后缀。
postProcess:要应用的默认后处理器的字符串或数组。
postProcessPassResolved:将已解析的对象传递到后处理器的选项对象中作为'i18nResolved'属性。
returnNull:允许空值作为有效的翻译。
returnEmptyString:允许空字符串作为有效的翻译。
returnObjects:允许对象作为有效的翻译结果。
returnDetails:返回包含有关所使用的语言、命名空间、键和值的信息的对象。
returnedObjectHandler:如果作为键传递了对象但returnObjects设置为false,则调用此方法。
joinArrays:用于连接数组的字符,例如'\n'。
overloadTranslationOptionHandler:设置defaultValue的函数。
interpolation:插值选项。
react:用于React的选项。
initImmediate:在setTimeout内触发init函数中的资源加载(默认异步行为)。
keySeparator:用于分隔键的字符。
nsSeparator:用于分隔命名空间和键的字符。
pluralSeparator:用于分隔复数和键的字符。
contextSeparator:用于分隔上下文和键的字符。
appendNamespaceToCIMode:在使用'cimode'时将命名空间前缀到返回的键。
compatibilityJSON:兼容性JSON版本。
locizeLastUsed:用于locize-lastused的选项。
locizeLastUsed.projectId:您的locize项目的ID。
locizeLastUsed.apiKey:如果要发送缺失的键,则使用的API密钥。
locizeLastUsed.referenceLng:项目的参考语言,默认为'en'。
locizeLastUsed.version:版本,默认为'latest'。
locizeLastUsed.debounceSubmit:发送数据的防抖间隔(毫秒),默认为90000。
locizeLastUsed.allowedHosts:允许发送最后使用数据的主机名数组。请将这些主机限制在本地系统、演示、测试服务器(而非生产环境)。默认为['localhost']。
ignoreJSONStructure:自动查找嵌套键,如果未找到则查找平面键,反之亦然。
maxParallelReads:调用后端的并行度限制。
maxRetries:执行重试的最大次数。
retryTimeout:在失败请求的重试之间等待的时间。
- callback:用于处理错误
3.i18next.t(keys, options):获取对应key的配置文本,options省略获取当前语言的
4.i18next.exists(key, options):判断对应的key是否存在
5.i18next.getFixedT(lng, ns, keyPrefix):
const t = i18next.getFixedT(null, null, 'user.accountSettings.changePassword')
const title = t('title');
6.i18next.changeLanguage(lng, callback):切换当前语言
- lng:需要切换的语言
- callback:用于处理错误
7.i18next.language、i18next.resolvedLanguage:获取当前是哪种语言
8.i18next.languages:获取总共配置了哪些语言
9.i18next.hasLoadedNamespace(ns, options):检查命名空间是否已加载
10.i18next.loadLanguages(lngs, callback):预加载init中未定义的其他语言
11.i18next.reloadResources():重新加载资源
12.i18next.setDefaultNamespace(ns):更改默认命名空间
13.i18next.dir(lng):获取语言读取方向, rtl 或 ltr
14.i18next.format(data, format, lng):用于格式化文本
// key = 'hello {{what}}'
i18next.t('key', { what: i18next.format('world', 'uppercase') }); // -> hello WORLD
四、i18next相关事件
1.i18next.on(‘initialized’, function(options) {}):初始化事件
2.i18next.on(‘languageChanged’, function(lng) {}):语言改变事件
3.i18next.on(‘loaded’, function(loaded) {}):资源加载事件
4.i18next.on(‘failedLoading’, function(lng, ns, msg) {}):资源加载失败事件
5.i18next.on(‘missingKey’, function(lngs, namespace, key, res) {}):在访问不存在的密钥时被触发。需要将 saveMissing 设置为 true。
6.i18next.store.on(‘removed’, function(lng, ns) {}):资源删除事件
7.i18next.store.on(‘added’, function(lng, ns) {}):资源添加事件
五、react-i18next相关hook之useTranslation:获取函数组件中的 t 函数和 i18n 实例
1.基本使用
import i18n from "i18next";
import { initReactI18next } from "react-i18next";const resources = {zh_CN: {translation: {ok:'确认',common:{placeholder: '请输入'}},},en: {translation: {ok:'确定',common:{placeholder: 'Please enter'}},},
};i18n.use(initReactI18next).init({resources,lng: 'zh_CN',fallbackLng: 'zh_CN',interpolation: {escapeValue: false,},
});export default i18n;
import {useTranslation} from "react-i18next";const Home = () => {const {t,i18n} = useTranslation();console.log(t('ok'))return (<>{t('common.placeholder')}</>)
}export default Home;
2.配置命名空间
import i18n from "i18next";
import { initReactI18next } from "react-i18next";const resources = {zh_CN: {common:{placeholder: '请输入'},translation: {ok:'确认',},},en: {common:{placeholder: 'Please enter'},translation: {ok:'ok',},},
};i18n.use(initReactI18next).init({resources,lng: 'zh_CN',fallbackLng: 'zh_CN',ns: ['common'], // 定义命名空间数组defaultNS: 'translation', // 指定默认的命名空间interpolation: {escapeValue: false,},
});export default i18n;
import {useTranslation} from "react-i18next";const Home = () => {const {t} = useTranslation(['common','translation']);console.log(t('ok',{ ns: 'translation' })); //数组的第一个可以不传nsreturn (<>{t('placeholder')}</>)
}export default Home;
3.指定获取的前缀
import i18n from "i18next";
import { initReactI18next } from "react-i18next";const resources = {zh_CN: {common:{placeholder: '请输入'},translation: {ok:'确认',very: {deeply: {nested: {test: '测试'}}}},},en: {common:{placeholder: 'Please enter'},translation: {ok:'ok',very: {deeply: {nested: {test: 'test'}}}},},
};i18n.use(initReactI18next).init({resources,lng: 'zh_CN',fallbackLng: 'zh_CN',ns: ['common'], // 定义命名空间数组defaultNS: 'translation', // 指定默认的命名空间interpolation: {escapeValue: false,},
});export default i18n;
import {useTranslation} from "react-i18next";const Home = () => {const { t } = useTranslation('translation', { keyPrefix: 'very.deeply.nested' });return (<>{t('test')}</>)
}export default Home;
4.覆盖i18n实例
import i18n from './i18n';
const { t, i18n } = useTranslation('ns1', { i18n });
5.不使用 React Suspense 来处理翻译加载
const { t, i18n, ready } = useTranslation('ns1', { useSuspense: false });
6.使用方法:useTranslation(ns,options)。ns命名空间可以是字符串、数组;options配置如下
- i18n:i18next 实例,用于提供国际化功能。
- useSuspense:是否启用 React Suspense 模式来处理翻译加载。
- keyPrefix:键前缀,用于在翻译键前添加前缀。
- bindI18n:绑定 i18n 实例的方式,可以是字符串或 false。
- nsMode:命名空间模式,指定命名空间的加载方式,可以是 ‘fallback’ 或 ‘default’。
- lng:指定要使用的语言代码。
六、react-i18next高阶组件之withTranslation,服务端对应withSSR
1.基本使用
import {withTranslation} from "react-i18next";const Home = ({ t, i18n }) => {return (<>{t('ok')}</>)
}export default withTranslation()(Home);
2.指定命名空间获取
import {withTranslation} from "react-i18next";const Home = ({ t, i18n }) => {console.log(t('placeholder',{ns:'common'}))return (<>{t('ok')}</>)
}export default withTranslation(['translation','common'])(Home);
3.指定获取的前缀
import {withTranslation} from "react-i18next";const Home = ({ t, i18n }) => {return (<>{t('test')}</>)
}export default withTranslation('translation', { keyPrefix: 'very.deeply.nested' })(Home);
4.覆盖i18n实例
import i18n from './i18n';const ExtendedComponent = withTranslation('ns1')(MyComponent);<ExtendedComponent i18n={i18n} />
5.不使用 React Suspense 来处理翻译加载
const ExtendedComponent = withTranslation()(MyComponent);<ExtendedComponent useSuspense={false} />
七、react-i18next组件之Translation
1.基本使用
import {Translation} from "react-i18next";const Home = () => {return (<Translation>{(t, {i18n}) => <p>{t('ok')}</p>}</Translation>)
}export default Home;
2.指定命名空间获取
import {Translation} from "react-i18next";const Home = () => {return (<Translation ns={['translation','common']}>{(t, {i18n}) => <p>{t('placeholder',{ns:'common'})}</p>}</Translation>)
}export default Home;
3.指定获取的前缀
import {Translation} from "react-i18next";const Home = () => {return (<Translation ns='translation' keyPrefix='very.deeply.nested'>{(t, {i18n}) => <p>{t('test')}</p>}</Translation>)
}export default Home;
4.覆盖i18n实例
import i18n from './i18n';<Translation i18n={i18n}>
{(t, { i18n }) => <p>{t('my translated text')}</p> // will be looked up from namespace ns1
}
</Translation>
5.不使用 React Suspense 来处理翻译加载
import {Translation} from "react-i18next";const Home = () => {return (<Translation ns='translation' useSuspense={false}>{(t, {i18n}) => <p>{t('test')}</p>}</Translation>)
}export default Home;
6.相关属性
- children:一个函数,接受三个参数(翻译函数 t、选项对象和加载状态 ready),返回 React 节点。
- ns:命名空间,用于指定翻译内容所属的命名空间。
- i18n:i18next 实例,用于提供国际化功能。
- useSuspense:是否启用 React Suspense 模式来处理翻译加载。
- keyPrefix:键前缀,用于在翻译键前添加前缀。
- nsMode:命名空间模式,指定命名空间的加载方式,可以是 ‘fallback’ 或 ‘default’。
八、react-i18next组件之Trans
1.基本使用
import {Trans, useTranslation} from "react-i18next";const Home = () => {const { t } = useTranslation();return (<><Trans t={t}>ok</Trans><Trans t={t} i18nKey="ok"></Trans></>)
}export default Home;
2.指定命名空间获取
import {Trans, useTranslation} from "react-i18next";const Home = () => {const { t } = useTranslation(['translation','common']);return <Trans t={t} ns="common">placeholder</Trans>;
}export default Home;
3.覆盖i18n实例
import i18n from './i18n';<Trans t={t} i18n={i18n}>ok</Trans>
4.相关属性
- children:子元素内容,可以是一个或多个 TransChild 元素。
- components:自定义组件,可以是一个包含 React 元素的数组或对象,用于替换默认的标签渲染。
- count:用于处理复数形式的计数。
- context:上下文信息,用于指定翻译的上下文环境。
- defaults:默认翻译文本,用于指定在未找到翻译时的默认文本。
- i18n:i18next 实例,用于提供国际化功能。
- i18nKey:指定的翻译键或键数组。
- ns:命名空间,用于指定翻译内容所属的命名空间。
- parent:父组件,用于在 React.createElement 中创建元素时指定父组件。
- tOptions:翻译选项,用于传递给翻译函数的参数。
- values:变量值对象,用于替换翻译文本中的变量占位符。
- shouldUnescape:是否应解码转义字符。
- t:用于执行翻译的函数。
九、react-i18next组件之I18nextProvider:注入实例
import { I18nextProvider } from 'react-i18next';
import i18n from './i18n';
import App from './App';<I18nextProvider i18n={i18n} defaultNS={'translation'}><App />
</I18nextProvider>
十、使用模板变量
1.lang.js
import i18n from "i18next";
import { initReactI18next } from "react-i18next";const resources = {zh_CN: {translation: {hello:'你好 {{text}}'},},en: {translation: {hello:'hello {{text}}'},},
};i18n.use(initReactI18next).init({resources,lng: 'zh_CN',fallbackLng: 'zh_CN',interpolation: {escapeValue: false,},
});export default i18n;
2.useTranslation 使用变量
import {useTranslation} from "react-i18next";const Home = () => {const {t,i18n} = useTranslation();let textToShow = '';if (i18n.language === 'zh_CN') {textToShow = t('hello', { text: '世界' });} else if (i18n.language === 'en') {textToShow = t('hello', { text: 'world' });}return (<>{textToShow}</>)
}export default Home;
3.withTranslation 使用变量
import {withTranslation} from "react-i18next";const Home = ({t,i18n}) => {let textToShow = '';if (i18n.language === 'zh_CN') {textToShow = t('hello', { text: '世界' });} else if (i18n.language === 'en') {textToShow = t('hello', { text: 'world' });}return (<>{textToShow}</>)
}export default withTranslation()(Home);
4.Translation 使用变量
import {Translation} from "react-i18next";const Home = () => {return (<Translation ns='translation' useSuspense={false}>{(t, {i18n}) => {let textToShow = '';if (i18n.language === 'zh_CN') {textToShow = t('hello', { text: '世界' });} else if (i18n.language === 'en') {textToShow = t('hello', { text: 'world' });}return <p>{textToShow}</p>}}</Translation>)
}export default Home;
5.Trans 使用变量
import {Trans, useTranslation} from "react-i18next";const Home = () => {const { t,i18n } = useTranslation();let textToShow = '';if (i18n.language === 'zh_CN') {textToShow = '世界';} else if (i18n.language === 'en') {textToShow = 'world';}return (<><Trans t={t} values={{ text: textToShow}}>hello</Trans></>)
}export default Home;
相关文章:
react国际化配置react-i18next详解
react PC端项目构建TS,react18.2.0antdviteaxiosreduxsassts 完整版代码下载: https://download.csdn.net/download/randy521520/88922625 react PC端项目构建,react18.2.0antdviteaxiosreduxsass完整版代码下载: https://downloa…...
Java并发编程——上下文切换、死锁、资源限制
文章目录 1.1上下文切换(1)上下文切换的概念(2)多线程一定比单线程快吗?(3)测量上下文切换如何减少上下文切换 1.2 死锁(1)死锁的定义(2)死锁产生…...
MS08067练武场--WP
免责声明:本文仅用于学习和研究目的,不鼓励或支持任何非法活动。所有技术内容仅供个人技术提升使用,未经授权不得用于攻击、侵犯或破坏他人系统。我们不对因使用本文内容而引起的任何法律责任或损失承担责任。 注:此文章为快速通关…...
ubuntu文件同步
1. 使用 rsync 同步文件 rsync 是一个常用的文件同步工具,可以在本地或远程系统之间同步文件和目录。 基本用法: rsync -avz /源目录/ 目标目录/-a:归档模式,保留文件属性。-v:显示详细输出。-z:压缩传输…...
C++23 新特性解析
引言:C的持续进化 在ISO C标准委员会的不懈努力下,C23作为继C20后的又一重要迭代版本,带来了十余项核心语言特性改进和数十项标准库增强。本文将深入解析最具实用价值的五大新特性,介绍std::expected到模块化革命。 编译器支持 …...
算法05-堆排序
堆排序详解 堆排序(Heap Sort)是一种基于二叉堆数据结构的排序算法。它的核心思想是利用堆的性质(最大堆或最小堆)来实现排序。堆排序分为两个主要步骤:建堆和排序。 1. 什么是堆? 堆是一种特殊的完全二叉…...
Arrays工具类详解
目录 1. Arrays.toString() 方法 2. Arrays.deepToString() 方法 3. Arrays.equals(int[ ] arr1, int[ ] arr2) 方法 4. Arrays.equals(Object[] arr1, Object[] arr2) 方法 5. Arrays.deepEquals(Object[] arr1, Object[] arr2) 方法 6. Arrays.sort(int[] arr) 方法 7…...
无人机图像拼接数据的可视化与制图技术:以植被监测为例
无人机技术在生态环境监测中的应用越来越广泛,尤其是在植被监测领域。通过无人机获取的高分辨率影像数据,结合GIS技术,可以实现对植被覆盖、生长状况等的精确监测与分析。本文将通过一个实际案例,详细讲解无人机图像拼接数据的可视…...
在 debian 12 上安装 mysqlclient 报错
报错如下 Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple Collecting mysqlclientUsing cached https://pypi.tuna.tsinghua.edu.cn/packages/61/68/810093cb579daae426794bbd9d88aa830fae296e85172d18cb0f0e5dd4bc/mysqlclient-2.2.7.tar.gz (91 kB)Installi…...
python基础入门:7.1迭代器与生成器
Python迭代器与生成器深度解析:高效处理海量数据的利器 # 大文件分块读取生成器模板 def chunked_file_reader(file_path, chunk_size1024*1024):"""分块读取大文件生成器"""with open(file_path, r, encodingutf-8) as f:while Tru…...
Docker 容器 Elasticsearch 启动失败完整排查记录
背景 在服务器上运行 Docker 容器 es3,但 Elasticsearch 无法正常启动,运行 docker ps -a 发现 es3 处于 Exited (1) 状态,即进程异常退出。 本次排查从错误日志、容器挂载、权限问题、SELinux 影响、内核参数等多个方面入手,最…...
达梦数据使用笔记
相关文档: 达梦官网 达梦技术文档 1.安装完成后在开始菜单中搜索DM 目录:C:\ProgramData\Microsoft\Windows\Start Menu\Programs\达梦数据库 下有所有相关信息 2.数据迁移 https://eco.dameng.com/document/dm/zh-cn/start/mysql_dm.html https:…...
操作系统中的任务调度算法
一、引言 在操作系统中,任务调度算法是核心组件之一,它负责合理分配有限的 CPU 资源,以确保系统的高效运行和良好的用户体验。任务调度的目标是实现公平性、最小化等待时间、提高系统吞吐量,并最大化 CPU 的利用率。不同的任务调…...
Linux 虚拟服务器(LVS)技术详解
一、LVS 概述 Linux 虚拟服务器(Linux Virtual Server,简称 LVS)是由章文嵩博士开发的一种开源的服务器集群技术,它工作在 Linux 内核空间,为构建高可用、可扩展的网络服务提供了一种高效的解决方案。LVS 可以将多个真…...
AIoT时代来临,物联网技术如何颠覆未来生活?
在这个万物互联的时代,“物联网”(IoT)正以前所未有的速度改变我们的生活,而“AIoT”则是在物联网基础上融入人工智能技术,赋予设备更高的智能和自主决策能力。随着5G、边缘计算和云技术的不断发展,物联网正…...
C++17 新特性解析
C++17 是 C++ 标准的一个重要更新,它在 C++11/14 的基础上引入了许多新特性,进一步简化了代码编写、提升了性能和类型安全性。以下是 C++17 的主要特性分类介绍: 一、语言核心改进 1. 结构化绑定(Structured Bindings) 允许将元组、结构体或数组的成员直接解包到变量中。…...
嵌入式软件C语言面试常见问题及答案解析(四)
嵌入式软件C语言面试常见问题及答案解析(四) 原本打算将链表相关的面试题整合到一个文档中,奈何写着写着就发现题目比较多,题型也比较丰富,所以导致上一篇已经足够长了,再长也就有点不礼貌了。 所以在这儿继续来总结分享那个面试中遇到的题目,文中的问题和提供的答案或者…...
在 C# 中,处理 Excel 和 PDF 文件的库有很多。以下是一些比较常用的选择
读取 Excel 文件的库 NPOI 用途:可以读取和写入 .xls 和 .xlsx 文件。特点:无需安装 Microsoft Office,支持简单的 Excel 操作,如格式化、公式、图表等。 EPPlus 用途:主要用于 .xlsx 格式(Excel 2007 及以…...
绩效归因概述
绩效归因概述 1. 分类2. 基于净值的归因方法2.1 发展背景2.2 择时选股模型 T-M模型2.3 择时选股模型 H-M模型2.4 择时选股模型 C-L模型2.5 风格配置模型-Sharpe2.6 多因子模型 Fama-French32.7 多因子模型 Carhart42.8 多因子模型 Fama-French5 3. 基于持仓的归因方法3.1 发展背…...
Spring Boot 中加载多个 YAML 配置文件
在 Spring Boot 中加载多个 YAML 配置文件是一个常见的需求,通常用于将配置信息分离到多个文件中以便于管理和维护。Spring Boot 提供了灵活的方式来加载多个 YAML 配置文件。 以下是一些方法和步骤,用于在 Spring Boot 应用中加载多个 YAML 配置文件&a…...
React第五十七节 Router中RouterProvider使用详解及注意事项
前言 在 React Router v6.4 中,RouterProvider 是一个核心组件,用于提供基于数据路由(data routers)的新型路由方案。 它替代了传统的 <BrowserRouter>,支持更强大的数据加载和操作功能(如 loader 和…...
Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...
学校招生小程序源码介绍
基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码,专为学校招生场景量身打造,功能实用且操作便捷。 从技术架构来看,ThinkPHP提供稳定可靠的后台服务,FastAdmin加速开发流程,UniApp则保障小程序在多端有良好的兼…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...
SpringTask-03.入门案例
一.入门案例 启动类: package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...
vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
OPENCV形态学基础之二腐蚀
一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...
docker 部署发现spring.profiles.active 问题
报错: org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...
【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看
文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...
