ArkTS 进阶之道(25):@StorageLink/@StorageProp 应用级状态绑定边界——为啥双向绑定 vs 单向只读
ArkTS 进阶之道25StorageLink/StorageProp 应用级状态绑定边界——为啥双向绑定 vs 单向只读本文是「ArkTS 进阶之道」系列第 25 篇续「ArkUI 状态联动」深水区。上篇讲 LocalStorage 页面级状态存储槽边界同页面多组件共享页面卸载就销毁。本文讲应用级状态绑定边界StorageLink 双向绑定 vs StorageProp 单向只读——根因在双向绑定槽 vs 单向只读槽。能力系列篇 25 讲过 StorageLink/StorageProp 怎么用本文讲为哈 StorageLink 双向绑定合法 StorageProp 单向只读组件不能改——根因在双向绑定槽 vs 单向只读槽。一、开篇StorageLink 不是单向只读是双向绑定 AppStorage 键你写 React 时应用级状态绑定是「useSelector 魔法」useSelector 双向 sync redux store// React 应用级状态绑定useSelector useDispatch 双向 sync function Comp() { const count useSelector(state state.count) // 单向读 redux store const dispatch useDispatch() return button onClick{() dispatch({ type: INC })}count{count}/button // 改用 dispatch } // React 应用级状态绑定useSelector 单向读 useDispatch 改双向 sync 魔法你写鸿蒙 ArkTS 时StorageLink双向绑定 AppStorage 键——组件改互同步// ArkTS StorageLink 双向绑定 AppStorage 键 AppStorage.setOrCreate(appCount, 0) Component struct LinkComp { StorageLink(appCount) appCount: number 0 // ✅ StorageLink 双向绑定改互同步 build() { Button(appCount${this.appCount}) .onClick(() { this.appCount }) // ✅ 组件改 → AppStorage 同步 → 其他组件同步 } } // StorageLink 双向绑定 AppStorage 键组件改 → AppStorage 同步 → 其他组件同步双向useSelector 魔法 vs 双向绑定槽的区别React 把应用级状态绑定当 useSelector 魔法单向读 useDispatch 改ArkTS 把 StorageLink 当「双向绑定槽」组件改互同步。根因不是 useSelector 魔法是双向绑定槽——StorageLink 双向绑定 AppStorage 键组件改 → AppStorage 同步 → 其他组件同步双向。二、根因StorageLink/StorageProp 的双向绑定槽 vs 单向只读槽机制鸿蒙 ArkUI 的 StorageLink/StorageProp 是应用级状态绑定槽——StorageLink 双向绑定槽StorageProp 单向只读槽来自三重绑定机制。机制 1StorageLink 双向绑定 AppStorage 键——组件改互同步StorageLink 荬饰器双向绑定 AppStorage 键——组件改 → AppStorage 同步 → 其他组件同步双向AppStorage.setOrCreate(appCount, 0) Component struct LinkComp { StorageLink(appCount) appCount: number 0 // ✅ StorageLink 双向绑定改互同步 build() { Column() { Text(appCount ${this.appCount}) Button(改 appCount) .onClick(() { this.appCount }) // ✅ 组件改 → AppStorage 同步 → 其他组件同步 } } } // StorageLink 双向绑定 AppStorage 键组件改 → AppStorage 同步 → 其他组件同步双向StorageLink 双向绑定 AppStorage 键StorageLinkappCount荬饰器双向绑定 AppStorage 键——组件改appCount→ AppStorage 同步 → 其他组件同步双向。根因不是单向只读是双向绑定槽——StorageLink 双向绑定 AppStorage 键组件改互同步双向。机制 2StorageProp 单向只读绑定——AppStorage 改组件同步组件不能改StorageProp 荬饰器单向只读绑定——AppStorage 改 → 组件同步组件改只改本地副本不回传AppStorage.setOrCreate(appCount, 0) Component struct PropComp { StorageProp(appCount) appCount: number 0 // ⚠ StorageProp 单向只读组件不能改 build() { Column() { Text(appCount ${this.appCount}只读组件不能改) Button(试改 appCount) .onClick(() { // ⚠ StorageProp 只读改只改组件本地副本不回传 AppStorage单向只读 this.appCount // ⚠ 只改本地副本AppStorage 不同步其他组件不同步 }) } } } // StorageProp 单向只读绑定AppStorage 改 → 组件同步组件改只改本地副本不回传StorageProp 单向只读绑定StoragePropappCount荬饰器单向只读绑定——AppStorage 改appCount→ 组件同步组件改appCount只改本地副本不回传 AppStorage。根因不是双向同步是单向只读槽——StorageProp 单向只读绑定AppStorage 改组件同步组件改不回传。机制 3StorageLink vs StorageProp 边界——双向绑定 vs 单向只读StorageLink双向绑定组件改互同步StorageProp单向只读AppStorage 改组件同步组件改不回传——根因都是绑定 AppStorage 键但绑的机制不同AppStorage.setOrCreate(appCount, 0) // ✅ StorageLink 路径双向绑定组件改 → AppStorage 同步 → 其他组件同步双向 Component struct LinkComp { StorageLink(appCount) appCount: number 0 // ✅ StorageLink 双向绑定 build() { Button(LinkComp ${this.appCount}) .onClick(() { this.appCount }) // ✅ 组件改 → AppStorage 同步 → 其他组件同步 } } // ⚠ StorageProp 路径单向只读AppStorage 改 → 组件同步组件改不回传 Component struct PropComp { StorageProp(appCount) appCount: number 0 // ⚠ StorageProp 单向只读 build() { Button(PropComp ${this.appCount}) .onClick(() { this.appCount }) // ⚠ 改只改本地副本AppStorage 不同步 } } // StorageLink vs StorageProp 边界双向绑定改互同步vs 单向只读组件改不回传StorageLink vs StorageProp 边界StorageLink 路径——双向绑定组件改 → AppStorage 同步 → 其他组件同步双向推荐组件要改用。StorageProp 路径——单向只读AppStorage 改 → 组件同步组件改只改本地副本不回传推荐组件只读用。根因都是绑定 AppStorage 键但绑的机制不同——StorageLink 双向绑定槽改互同步StorageProp 单向只读槽组件改不回传。机制 4AppStorage.set 改 → StorageLink StorageProp 都同步AppStorage.set改 AppStorage 键→ StorageLink StorageProp 都同步AppStorage 是源AppStorage.setOrCreate(appCount, 0) Entry Component struct Index { StorageLink(appCount) linkCount: number 0 // ✅ StorageLink 双向绑定 build() { Column() { Button(直接改 AppStorage.set(appCount, 50)) .onClick(() { AppStorage.set(appCount, 50) // ✅ AppStorage 改 → StorageLink 同步 StorageProp 同步 // ✅ AppStorage 是源StorageLink 和 StorageProp 都从 AppStorage 同步 }) } } } // AppStorage.set 改 → StorageLink StorageProp 都同步AppStorage 是源AppStorage.set 改 → StorageLink StorageProp 都同步AppStorage.setappCount改 AppStorage 键 → StorageLink StorageProp 都同步AppStorage 是源。根因不是组件改是 AppStorage 源——AppStorage.set 改 → StorageLink StorageProp 都同步AppStorage 是源。三、真机配图StorageLink/StorageProp 应用级状态绑定边界——双向 vs 只读初始态LinkComp appCount0 葝色双向、PropComp appCount0 橙色只读均绑定边界初始态齐点调三按钮后LinkComp appCount50 葝色被 AppStorage.set 直接改 50 覆盖、PropComp appCount50 橙色只读同步、StorageLink 双向 vs StorageProp 只读边界证据齐对比证据点 LinkComp 改 appCount 后 AppStorage 同步StorageLink 双向点 PropComp 试改 appCount 后只改本地副本不回传StorageProp 只读点直接改 AppStorage.set(“appCount”, 50) 后 LinkComp PropComp 都同步 50AppStorage 是源。StorageLink 双向绑定 vs StorageProp 单向只读——StorageLink 绑定 AppStorage 键改互同步双向StorageProp 绑定 AppStorage 键只读组件改不回传。四、真解法StorageLink/StorageProp 应用级状态绑定的三个场景场景 1StorageLink 双向绑定计数器90% 场景首选组件要改用双向AppStorage.setOrCreate(appCount, 0) Component struct LinkComp { StorageLink(appCount) appCount: number 0 // ✅ StorageLink 双向绑定改互同步 build() { Column() { Text(appCount ${this.appCount}) Button(改 appCount) .onClick(() { this.appCount }) // ✅ 组件改 → AppStorage 同步 → 其他组件同步 } } }为哈能跑StorageLink 双向绑定计数器——双向绑定槽StorageLinkappCount双向绑定 AppStorage 键组件改appCount→ AppStorage 同步 → 其他组件同步双向。首选这个90% 的场景组件要改应用级状态用 StorageLink 双向绑定槽就够。要写「组件改应用级状态计数器等」时用这个——不用 StorageProp 单向只读组件改不回传StorageLink 双向绑定改互同步。场景 2StorageProp 单向只读绑定展示组件只读用单向AppStorage 改组件同步AppStorage.setOrCreate(appCount, 0) Component struct PropComp { StorageProp(appCount) appCount: number 0 // ⚠ StorageProp 单向只读组件不能改 build() { Text(appCount ${this.appCount}只读展示组件不能改) // ✅ AppStorage 改 → 组件同步只读展示 } } // StorageProp 单向只读绑定展示AppStorage 改 → 组件同步只读展示组件不能改为哈能跑StorageProp 单向只读绑定展示——单向只读槽StoragePropappCount单向只读绑定 AppStorage 键AppStorage 改appCount→ 组件同步只读展示组件不能改。要写「组件只读展示应用级状态只读展示等」时用这个——不用 StorageLink 双向绑定组件改会回传StorageProp 单向只读组件不能改。场景 3StorageLink StorageProp 混用改组件用 StorageLink只读组件用 StoragePropAppStorage.setOrCreate(appCount, 0) // ✅ 改组件用 StorageLink 双向绑定组件改 → AppStorage 同步 Component struct EditComp { StorageLink(appCount) appCount: number 0 // ✅ StorageLink 双向绑定改互同步 build() { Column() { TextInput({ text: ${this.appCount}, placeholder: 输入值 }) .onChange((value: string) { this.appCount parseInt(value) || 0 }) // ✅ 改 → AppStorage 同步 } } } // ✅ 只读组件用 StorageProp 单向只读AppStorage 改 → 组件同步只读展示 Component struct ShowComp { StorageProp(appCount) appCount: number 0 // ✅ StorageProp 单向只读组件不能改 build() { Text(只读展示 appCount ${this.appCount}) // ✅ AppStorage 改 → 组件同步只读展示 } } // StorageLink StorageProp 混用改组件用 StorageLink 双向只读组件用 StorageProp 单向只读为哈能跑StorageLink StorageProp 混用——改组件用 StorageLink 双向绑定组件改 → AppStorage 同步只读组件用 StorageProp 单向只读AppStorage 改 → 组件同步只读展示。要写「改组件 只读组件混用编辑 展示等」时用这个——改组件用 StorageLink 双向只读组件用 StorageProp 单向只读。五、一句话哲学StorageLink 不是单向只读是双向绑定 AppStorage 键的改互同步StorageProp 是单向只读的组件不能改。ArkUI 的 StorageLink 荬饰器双向绑定 AppStorage 键组件改互同步双向。根因不是单向只读是双向绑定槽——StorageLink 双向绑定 AppStorage 键组件改 → AppStorage 同步 → 其他组件同步双向 StorageProp 单向只读绑定AppStorage 改 → 组件同步组件改只改本地副本不回传 StorageLink vs StorageProp 边界双向绑定 vs 单向只读 AppStorage.set 改 → StorageLink StorageProp 都同步AppStorage 是源。对比 React 应用级状态绑定 useSelector 魔法单向读 useDispatch 改ArkTS StorageLink 双向绑定槽改互同步。状态联动深水区串讲Watch 绑 State 变触发副作用回调槽篇 68 Link $ 语法双向绑定跨组件同步篇 69 Provide/Consume 跨层级传递槽祖辈后辈同步篇 70 Observed/ObjectLink 嵌套对象观测槽子属性改刷 UI篇 71 AppStorage 应用级状态存储槽所有页面共享篇 72 LocalStorage 页面级状态存储槽同页面多组件共享篇 73 StorageLink/StorageProp 应用级状态绑定边界双向 vs 只读篇 74StorageLink 双向绑定 vs StorageProp 单向只读——续「ArkUI 状态联动」深水区讲状态联动深水区Watch 寕作用回调槽边界 Link $ 语法双向绑定边界 Provide/Consume 跨层级传递槽边界 Observed/ObjectLink 嵌套对象观测槽边界 AppStorage 应用级状态存储槽边界 LocalStorage 页面级状态存储槽边界 StorageLink/StorageProp 应用级状态绑定边界。系列预告下篇篇 75讲 LocalStorageLink/LocalStorageProp 页面级状态绑定边界LocalStorage 绑定根因续「ArkUI 状态联动」深水区。五阶段哲学体系类型哲学50-52→ 作用域哲学53-55→ 状态哲学56-59→ 渎染哲学60-62→ 组件设计63-67→ 状态联动深水区68讲清 ArkTS/ArkUI 进阶哲学。能力系列回链能力系列篇本文进阶点篇 25 StorageLink/StorageProp 用法StorageLink/StorageProp 应用级状态绑定边界根因双向绑定 vs 单向只读篇 23 AppStorage 用法应用级状态存储槽边界所有页面共享页面卸载状态仍存在篇 59 Watch 用法状态联动深水区Watch 儝作用回调槽 vs onClick 直接调副作用边界真机 demo 完整代码// 篇 74 demoStorageLink/StorageProp 应用级状态绑定边界 // StorageLink 双向绑定 AppStorage 键改互同步vs StorageProp 单向只读绑定组件不能改 AppStorage.setOrCreate(appCount, 0) AppStorage.setOrCreate(appTheme, #007DFF) // ✅ StorageLink 双向绑定组件改互同步组件改 → AppStorage 同步AppStorage 改 → 组件同步 Component struct LinkComp { StorageLink(appCount) appCount: number 0 // ✅ StorageLink 双向绑定改互同步 build() { Column({ space: 6 }) { Text(组件 LinkCompStorageLink 双向绑定) .fontSize(11).fontColor(#2563eb).fontWeight(FontWeight.Bold) Text(appCount ${this.appCount}).fontSize(13).fontColor(#2563eb) Button(LinkComp 改 appCountStorageLink 双向组件改 → AppStorage 同步) .width(92%).height(36).fontSize(10) .onClick(() { this.appCount }) // ✅ 组件改 → AppStorage 同步 → 其他组件同步 } .width(92%).padding(8).backgroundColor(#e0f0ff).borderRadius(6) } } // ⚠ StorageProp 单向只读绑定组件AppStorage 改 → 组件同步组件不能改只读 Component struct PropComp { StorageProp(appCount) appCount: number 0 // ⚠ StorageProp 单向只读组件不能改 build() { Column({ space: 6 }) { Text(组件 PropCompStorageProp 单向只读) .fontSize(11).fontColor(#ff6600).fontWeight(FontWeight.Bold) Text(appCount ${this.appCount}只读组件不能改).fontSize(13).fontColor(#ff6600) Button(PropComp 试改 appCountStorageProp 只读改不回传 AppStorage) .width(92%).height(36).fontSize(10) .onClick(() { // ⚠ StorageProp 只读改只改组件本地副本不回传 AppStorage单向只读 this.appCount // ⚠ 只改本地副本AppStorage 不同步其他组件不同步 }) } .width(92%).padding(8).backgroundColor(#fff0e0).borderRadius(6) } } Entry Component struct Index { StorageLink(appTheme) appTheme: string #007DFF State log: string (未操作) build() { Column({ space: 12 }) { Text(篇 74 配图StorageLink/StorageProp 应用级状态绑定边界) .fontSize(16).fontWeight(FontWeight.Bold).margin({ top: 16, bottom: 4 }) Text(StorageLink 双向绑定改互同步vs StorageProp 单向只读组件不能改) .fontSize(10).fontColor(#888).margin({ bottom: 8 }) LinkComp() PropComp() // ✅ 直接改 AppStorageStorageLink 同步StorageProp 也同步 Button(直接改 AppStorage.set(appCount, 50)) .width(92%).height(40).fontSize(12) .onClick(() { AppStorage.set(appCount, 50) // ✅ AppStorage 改 → StorageLink 同步 StorageProp 同步 this.log AppStorage.set appCount50StorageLink StorageProp 都同步 }) Text(日志${this.log}).fontSize(10).fontColor(#333).margin({ top: 4 }) } .width(100%).height(100%).alignItems(HorizontalAlign.Center) } }写鸿蒙 ArkUI 记住StorageLink 不是单向只读是双向绑定 AppStorage 键的改互同步——StorageLink 荬饰器双向绑定 AppStorage 键组件改互同步双向。根因不是单向只读是双向绑定槽——StorageLink 双向绑定 AppStorage 键组件改 → AppStorage 同步 → 其他组件同步双向 StorageProp 单向只读绑定AppStorage 改 → 组件同步组件改只改本地副本不回传 StorageLink vs StorageProp 边界双向绑定 vs 单向只读 AppStorage.set 改 → StorageLink StorageProp 都同步AppStorage 是源。StorageLink 双向绑定计数器用双向绑定槽首选90% 场景StorageProp 单向只读绑定展示用单向只读槽组件不能改StorageLink StorageProp 混用改组件用 StorageLink 双向只读组件用 StorageProp 单向只读。双向绑定 vs 单向只读是 ArkUI 状态联动深水区核心

相关新闻

C语言学习:指针

C语言学习:指针

指针操作函数函数名就是函数首地址函数类型:int(*)(int,int)//除去变量名加*用途:实现回调函数 可以方便处理同类型函数qsort void qsort( void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *) );const void *a /const void *…

2026/10/16 19:32:24 阅读更多 →
镜像生命:从手性分子到生物探测盲区的科学探索

镜像生命:从手性分子到生物探测盲区的科学探索

那天晚上,我像往常一样打开视频,原本只是想找个背景音放松一下,却没想到被一个看似科幻的标题彻底拽了进去——“镜像生命:科学禁地”。起初我以为这又是那种故弄玄虚的伪科学话题,但越听越发现,它其实在用…

2026/10/16 19:32:29 阅读更多 →
Windows下Python导入DLL失败:从原理到实战的完整解决方案

Windows下Python导入DLL失败:从原理到实战的完整解决方案

1. 问题本质:为什么Python会“找不到”DLL?如果你在Windows上跑Python程序,特别是用到一些涉及底层硬件加速或复杂计算的库(比如onnxruntime、PyQt/shiboken、tensorflow等),十有八九都见过这个让人血压飙升…

2026/10/17 21:54:20 阅读更多 →

最新新闻

Aspen Plus Skill自动化更新系统设计与实现

Aspen Plus Skill自动化更新系统设计与实现

1. 项目概述:当流程模拟工程师开始写“自动更新脚本”你有没有过这样的经历:凌晨两点,盯着Aspen Plus界面里那个灰掉的“Update Skill”按钮发呆?刚改完一个热力学模型参数,想顺手把配套的Skill脚本同步更新到最新版&a…

2026/10/18 13:28:00 阅读更多 →
Java地理位置定位系统:NMEA解析、GeoHash+RTree空间索引与离线围栏判定

Java地理位置定位系统:NMEA解析、GeoHash+RTree空间索引与离线围栏判定

简介:这是一份面向高校计算机专业本科生的Java课程设计实践资源,聚焦地理位置定位功能开发,帮助学习者掌握Java GUI、数据库交互与GIS地图集成等综合技能。资源包含73个文件,主体为15个Java源码(含核心业务逻辑与Swing…

2026/10/18 13:28:00 阅读更多 →
多种小游戏合集开发复盘:架构、玩法与优化实践

多种小游戏合集开发复盘:架构、玩法与优化实践

最近我把手头零散写了很久的多个休闲小游戏统一收拢成了一个合集项目,项目标题就叫“多种小游戏”。起因很朴素:时间碎片化的玩家希望一个页面里能随时换着玩,我自己也想借这个机会把以前东一榔头西一棒子写的小游戏代码从逻辑到交互梳理清楚…

2026/10/18 13:28:00 阅读更多 →
Python自动化生成深度学习课件PPT:可复现的工程化实践

Python自动化生成深度学习课件PPT:可复现的工程化实践

简介:这是一份面向深度学习初学者与进阶学员的Python课件PPT,系统梳理从编程基础到主流模型再到行业落地的完整知识链路,帮助读者建立理论认知并衔接工程实践。内容覆盖Python语法与流程控制、数据清洗与标准化、线性回归、神经网络结构与激活…

2026/10/18 13:28:00 阅读更多 →
深度学习入门:从课件PPT到NumPy手写神经网络与PyTorch实战

深度学习入门:从课件PPT到NumPy手写神经网络与PyTorch实战

简介:这份《深度学习原理与应用》课件PPT面向高校学生、自学者及希望系统入门人工智能的开发者,帮助其建立从数学基础到经典模型的完整知识框架。课件共十一章,从深度学习概述讲起,依次覆盖线性代数、概率论与统计学、微积分与优化…

2026/10/18 13:28:00 阅读更多 →
Linux下NVML初始化失败:驱动与库版本不匹配的排查与修复指南

Linux下NVML初始化失败:驱动与库版本不匹配的排查与修复指南

1. 这个报错到底在说什么Failed to initialize NVML: Driver/library version mismatch这行字,但凡在 Linux 上跑过深度学习训练、折腾过显卡直通、或者手贱升级过一次系统内核的人,大概率都见过。它的字面意思很直白:NVML 初始化失败&#x…

2026/10/18 13:26:59 阅读更多 →

日新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 0:55:02 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →