登录社区云,与社区用户共同成长
邀请您加入社区
本文完整记录了将纯JS组件 react-native-step-indicator 适配至 HarmonyOS 的过程。该库无原生依赖,仅依赖 react 与 react-native,通过像素级验证——绿条宽度 = 宽度 × 进度 / 步数,当前步圆心位置 = 宽度/(2N) + k×宽度/N——实测三例13项断言全部精准通过,且交互、样式、动画均正常。接入仅需 --ignore-scripts
本文完整记录将 react-native-size-matters 适配 HarmonyOS 的过程。该库为纯 JS 尺寸缩放工具,核心仅18行代码,无需原生适配,运行时依赖为零。通过实测验证 scale、moderateScale 等函数换算结果与理论值逐像素吻合(377/339/189 px),31项断言全部通过。关键发现:extend 入口依赖 @env 模块,未配置时会导致打包失败;Sca
专题:布局与适配折叠屏展开后只是把单列卡片拉得很宽,信息密度没有增加;折叠后双栏又挤得无法阅读。适配重点应是内容结构随可用空间变化。
专题:布局与适配onLayout 读取高度后 setState,再用这个状态设置容器高度,回调又触发,页面开始持续抖动。测量结果和布局输入构成反馈环,小数误差或内容变化会让环路一直运转。
帮助 Diff 算法识别哪些元素变化了,避免就地复用导致的 bug(如输入框状态错乱)。状态管理方案多,选择成本高(Redux/MobX/Zustand/Recoil)跨平台能力强(React Web + React Native)(可中断):构建 workInProgress 树,计算变更。事件池机制(React 16 及之前,17 已移除):主 bundle + 业务 bundle,按需加载。
本文详述将 react-native-shimmer-placeholder 适配 HarmonyOS 的全过程。该库虽为纯 JS 组件,无原生依赖,但其 peerDependencies 中声明了 react-native-linear-gradient,实际却通过依赖注入实现降级(默认使用 View 兜底)。由于 View 无背景色,导致动画虽运行但视觉上完全静止,实测像素差异验证此现象。关键
本文完整记录了将 react-native-segmented-control-tab 适配至 HarmonyOS 的过程。该组件为纯 JS、零依赖的 class 组件,无需原生适配。通过像素级判据(选中段蓝底 #0076FF 位置从 39–284 移至 533–783,与预期 535–785 精确吻合),验证了控件布局正确性;并通过 23 项断言测试,涵盖单选/多选边界行为、默认值继承(Reac
本文详细记录了将 react-native-responsive-screen 适配至 HarmonyOS 的全过程。该库为纯 JS 工具库,无依赖、无需原生适配,仅 77 行代码。核心挑战在于:removeOrientationListener() 调用已废弃的 Dimensions.removeEventListener,在 RN 0.84.1 中会抛异常,且传入新函数引用导致无效移除。此外,
本文详述 react-native-ratings 适配 HarmonyOS 的全过程,核心发现:在 React 19.2.3 下,函数组件 AirbnbRating 因 defaultProps 被移除,不传 props 时渲染为 0 颗星,而 class 组件 Rating 正常显示 5 颗星。虽库为纯 JS 无需原生适配,但 prepare: "husky install" 导致目录安装失败
本文记录 react-native-popup-menu 适配 HarmonyOS 的完整过程。该库为纯 JS、零运行时依赖,无原生代码,main 指向与上游逐字节一致的 Rollup 产物,接入极简。核心挑战在于导出形态混用:MenuProvider 等为普通 class,而 Menu 等经 HOC 包装(withCtx → forwardRef),导致 typeof 为 object 且无 p
本文详述将 react-native-parallax-scroll-view 适配 HarmonyOS 的全过程。该库为纯 JS class 组件,无需原生代码,但依赖 prop-types,需手动安装。交付包修改了 src/index.js 中两行关键代码(移除已废弃的 ViewPropTypes),此改动必需却未披露,存在潜在风险。通过定量验证,视差位移在三个数据点上偏差均≤2px,结果精准
本文完整记录了将 react-native-loading-spinner-overlay 适配至 HarmonyOS 的过程。该库纯 JS 实现,无原生依赖,编译产物与上游完全一致,安装路径干净。实测验证其遮罩布局、透明度、全屏覆盖(含状态栏)均精确吻合设计,且会吞掉所有页面触摸事件。最大发现是其“半受控”缺陷:取消后组件状态与父组件 visible 不一致,且无任何回调通知。结论:可用,但需注
本文详述将 react-native-image-pan-zoom 适配 HarmonyOS 的全过程。该库为纯 JS 手势组件,零运行时依赖,但其 prepare 脚本会删除已提交的编译产物,导致 npm pack 与 install 失败。实测表明,必须使用 --ignore-scripts 安装方可成功。此外,因布局 dump 无法反映 transform 变化,需改用像素判据验证效果。最终
本文完整记录了将纯JS库 react-native-dropdown-picker 适配至HarmonyOS的全过程。该库无原生依赖,零运行时依赖,仅需三步接入:装包、配置watchFolders、注册测试页。实测验证其渲染与交互正常,但默认listMode = FLATLIST在ScrollView中会触发红屏警告,且dropDownDirection方向映射文档缺失,需手动规避。交付包实现零改
本文详述将 react-native-css-transformer 适配 HarmonyOS 的全过程。该库为构建期 Babel 转换器,非运行时组件,需通过 metro.config.js 集成,关键点:必须以真目录方式安装(不可用 file:),并配置 babelTransformerPath 和 sourceExts: ['css']。经验证,CSS 样式精准映射至布局(如 120px →
React Native iOS 发布可分层解耦:构建、上传与审核分离。关键在于确保 IPA 符合发布要求(如正确配置、证书有效、权限声明完整),并通过云构建生成,避免依赖个人 Mac。使用网页端上传(如初雪云)实现无 Mac 发布,提升团队协作效率。建立标准化工作流,明确每步交付标准,降低人为依赖,保障流程稳定可复现。
整理 React Native 热更新最常见的六个问题:重启后回滚、编译时间戳不一致、内容指纹不生效、热更后图片不显示、线上 JS 报错如何定位到源码、更新生效率如何排查,逐一给出原因和排查步骤。
两个多月前那截「Expo → 鸿蒙」的桥,现在通了双车道(双 SDK)、装了护栏(诊断与保护)、填了桥面的坑(运行时修复)。但鸿蒙生态的河还很宽:expo-image 的 Harmony backend、SDK55、更多三方库的适配……每一块都欢迎一起来修。《Expo 官方不支持鸿蒙?我用一个开源 CLI,让 Expo 项目复用一套代码跑上 HarmonyOS》如果你的团队正在做 Expo / R
专题:布局与适配一行标题右侧放操作按钮,短文案正常,长标题却把按钮挤出屏幕。开发者只给 Text 设置 numberOfLines,结果省略号也没有按预期出现,因为文本尚未获得可收缩的边界。
专题:布局与适配子容器写了 flex: 1,页面底部仍空出一截。继续给子节点加高度没有效果,因为可分配空间取决于父级约束:父亲没有撑开,孩子也无从填满。
本文完整记录将 react-native-collapsible 适配 HarmonyOS 的过程。该库纯 JS、零原生依赖,无需原生适配,实现文件与上游完全一致。验证显示折叠高度逐像素精确,动画流畅,但发现三处关键边界:挂载时 collapsed={false} 不生效、align 在未测高度前无效、align='bottom' 存在47px偏移。需注意 Accordion 必须子路径导入,且类
本文介绍在鸿蒙系统(OpenHarmony)上使用 React Native 鸿蒙(RNOH)开发时,如何通过 @react-native-oh-tpl/datetimepicker 库实现与 Android/iOS 一致的日期时间选择功能。该库基于上游 @react-native-community/datetimepicker 适配鸿蒙原生组件,支持日期/时间模式、多种显示样式(滚轮、内联、紧
本文记录将 react-native-circle-checkbox 适配 HarmonyOS 的全过程。该库为纯 JS 组件,无需原生适配,但需修正 3 行代码以兼容 RN 0.84.1(移除已废弃的 ViewPropTypes 与 Text.propTypes)。关键问题在于:通过 file: 方式接入时,其运行时依赖 prop-types 不会被自动安装,导致打包失败。修复方式为显式安装 p
Shopify 用 505 票的热度告诉你:跨端抽象在规模化下可能从杠杆变负债。这篇文章拆解它为何按模块回退原生、如何平衡双栈成本,以及中级开发者该如何重新思考选型边界。🤔 选型不是选框架,是选边界。
Shopify 从 React Native 回退到 Swift 与 Kotlin 的深度复盘告诉你:跨平台不是免费的,“桥接税”会在交易链路上被无限放大。📉 文章拆解了桥接成本、原生对齐滞后与人才错配三大痛点,并给出按调用密度切分模块、单向数据流、Feature Flag 灰度迁移的实战方案。
本文完整记录了将 react-native-autocomplete-input 适配至 HarmonyOS 的过程。该库为纯 JS 实现,无需原生适配,与 npm 上游版本逐字节一致(仅 package.json 差异)。验证通过端到端交互:输入 → 过滤 → 浮层下拉 → 点击选中,全链路可用。鸿蒙上因 Platform.select 落入 default 分支,采用 iOS 式绝对定位浮层,
本文完整记录了将 react-native-animated-spinkit 适配至 HarmonyOS 的过程。该库纯 JS 驱动,无原生模块,经验证:12 个动画在鸿蒙上均能正常渲染,且 useNativeDriver: true 真正生效,帧率达 63.7 fps。通过连拍两帧逐像素比对(变化率 6.17%),确认动画动态真实存在;停止后变化率为 0%,隐藏后区域全白,验证闭环。交付包存在
本文验证了 react-native-url-polyfill 在 HarmonyOS 上的兼容性:无需原生适配,代码与 npm 上游完全一致(仅换行符差异),通过 1538/1580 条 WPT 标准用例,显著优于鸿蒙自带 URL 实现(234/1580)。关键在于其依赖的平台能力(如 Platform.OS、BlobModule)在鸿蒙侧均可用。交付包无修改,仅需正确配置 file: 依赖与
本文完整记录了将 react-native-volume-control 适配至 HarmonyOS 的过程。该库具备原生实现,无需权限,可独立读写系统媒体音量。通过“库写→应用外读”“应用外写→库读”“应用外按键→库事件”三条独立路径验证,确认系统音量真实变更。交付包质量高,语义对齐上游 Android,事件机制更严谨。虽存在测试入口说明不全、spec.json 缺 upstreamCommit
本文详述将 react-native-uuid 适配 HarmonyOS 的全过程。该库为纯 JS 实现,无需原生适配,与 npm 上游代码逐字节一致。虽设备侧断言全过、测试通过率高,但 v3/v5 生成的 UUID 与 RFC 4122 及 Python 等主流实现零互通,且 v4 随机源依赖 Math.random,安全性不足。结论:v1/v4 可用作标识符,v3/v5 不可用;安全场景需原生
本文系统讲解React Native中错误处理、日志调试与性能优化三大核心能力。通过Error Boundary捕获渲染错误,结合try/catch处理异步与事件错误,实现应用容错;利用console、DevTools进行调试定位;并通过性能分析工具识别卡顿根源,提升用户体验与开发效率。
本文介绍 React Native 中实现数据持久化的三种核心方案:AsyncStorage(通用键值存储)、SecureStore(加密敏感数据)和 FileSystem(大文件处理),并强调选型原则——敏感数据用 SecureStore,高频读写用 MMKV(需原生构建),兼容性优先用 AsyncStorage。文章详细演示了 AsyncStorage 的基本用法、对象存储封装及自定义 Hoo
本文介绍React Native中让界面“活”起来的动画技术。通过Animated API,使用Animated.Value和Animated.timing实现平滑的透明度变化动画,强调动画不仅是视觉效果,更是用户体验的关键。文章对比了状态更新与动画系统的差异,指出useNativeDriver: true可提升性能,并为后续学习Reanimated和手势交互奠定基础。
本课聚焦于React Native的样式与布局,核心是掌握Flexbox实现美观、响应式界面。通过深入讲解flexDirection、justifyContent、alignItems等属性,结合flex、gap、flexWrap等实用技巧,解决多屏幕适配问题。强调React Native与Web CSS的差异(如默认flexDirection: column),并引入百分比尺寸与绝对定位,帮助开
本文详解 React Native 中 TextInput 组件的使用,重点讲解受控组件模式,实现用户输入的实时响应与状态管理。涵盖常用属性:keyboardType(键盘类型)、secureTextEntry(密码隐藏)、multiline(多行输入)、autoCapitalize(自动大写)、autoCorrect(纠错)、maxLength(长度限制)及 editable(可编辑性),并解决
本文探讨了React Navigation带来的状态共享难题,提出通过Context与useReducer解决prop drilling问题。通过创建ThemeContext,使用Provider提供状态,结合useContext实现跨层级数据访问,使组件无需层层传props即可共享主题、用户等全局状态,提升代码可维护性与复用性。
本文介绍React Native中多页面应用的导航解决方案,重点讲解React Navigation的核心用法。通过安装与配置,掌握Stack Navigator(堆栈导航)、Bottom Tab Navigator(标签导航)和Drawer Navigator(抽屉导航)的使用方法,实现页面跳转、参数传递及嵌套导航。结合NavigationContainer、Navigator与Screen组件
组件渲染应为纯函数,仅根据状态返回视图描述。网络请求、定时器等副作用需在渲染后执行。useEffect 是处理副作用的正确方式:不传依赖数组则每次渲染后执行;传空数组只挂载时执行一次;传具体依赖则依赖变化时重新执行。通过合理使用 useEffect,可在不影响渲染纯净性的前提下完成数据拉取、订阅监听等操作,确保状态更新与界面同步。
本课聚焦组件拆分与组合,解决大组件臃肿问题。通过将个人主页头部拆分为Avatar和UserInfo等小函数组件,实现代码复用与维护性提升。核心理念:界面 = 组件树,列表则由数据驱动一组组件。结合FlatList实践,掌握高效构建复杂界面的模式。
React Native的核心是“视图 = 函数(状态)”——界面由状态决定,无需手动修改DOM。通过useState管理状态,组件返回的JSX描述的是状态变化后的视图结果。当状态更新,React自动重新渲染,实现声明式编程。与命令式“找元素、改内容”不同,声明式只需关注“结果”,框架负责“过程”。这使代码更简洁、可维护性更强,如同点菜只需说“宫保鸡丁”,厨师自会完成烹饪。理解此思想,是掌握Rea
本文从零开始介绍 React Native 跨平台开发,阐明其基于 JavaScript/TypeScript 与 React 思想,通过原生组件渲染实现接近系统原生的体验。重点讲解声明式编程、函数组件、状态管理等核心概念,并对比命令式与声明式写法,帮助读者理解 React Native 的运行机制与开发逻辑,为后续学习奠定基础。
专题:Hooks 与状态主题切换一下,购物车、用户头像和整页列表都出现渲染记录。项目把 theme、user、cart 塞进一个大 Context,只要其中一项变化,所有读取这个 Context 的组件都进入更新范围。
专题:Hooks 与状态一个按钮里连续调用三次 setCount(count + 1),期望加三,结果只加一。把 setter 当成同步变量赋值,就很容易在批量选择、数量累加和合并更新里踩到相同问题。
专题:Hooks 与状态购物车数量已经加一,总价却下一次渲染才跟上。页面同时保存 items 和 total,再用 Effect 监听 items 更新 total,看起来职责分明,实际上维护了两份本可直接计算的信息。
专题:Hooks 与状态从联系人 A 切到联系人 B,标题已经变了,输入框里却还留着 A 的备注。代码里 useState 接收了 props 的初始值,开发者因此以为 props 改变会自动重置状态。实际上,初始化只发生在对应状态实例建立时。
本文详述了将 react-native-torch 适配至 HarmonyOS 的全过程:版本对齐、原生实现(19行ArkTS,2.8KB HAR)、模块注册与验证。核心难点在于硬件依赖——模拟器无闪光灯,故无法验证“灯亮”效果,但通过精准错误抛出(ERR_TORCH_UNAVAILABLE)证明了在不支持设备上拒绝操作而非假成功。接口设计严谨,权限无需声明,参数校验以被拒Promise形式实现,
react-native-quick-md5 采用 JSI 实现,通过 install() 同步注入 C++ MD5 函数至 JS 运行时,无需桥接。其原生模块为纯 C++ TurboModule,不依赖 ArkTS。适配需添加鸿蒙 HAR 模块及上游 MD5 算法源码(约 11 KB),HAR 包仅 7.3 KB,无权限要求。公开接口为同步的 stringMd5 与 binaryMd5,返回 3
react-native-device-uptime 需在鸿蒙平台补原生模块,因上游无 harmony/ 实现。适配仅需 5 行 ArkTS 代码,返回自启动以来的毫秒数字符串,与 Android 一致。关键点:iOS 返回秒(小数),Android 与鸿蒙返回毫秒(整数),单位差 1000 倍,跨平台行为不一致易致逻辑错误。通过 TurboModuleRegistry.getEnforcing
本文分析了 react-native-device-name 在鸿蒙平台的适配问题。该库需原生实现,因JS层仅为壳,依赖iOS/Android原生模块。鸿蒙无对应实现,需补充HAR与ArkTS TurboModule,仅8行代码即可完成。通过检查package.json的harmony.autolinking字段及平台目录结构可快速判断是否需适配。实现上采用marketName→productMo
react-native-crypto-js 为纯 JS 实现,无需鸿蒙原生适配,但上游包因打包裁剪导致 HmacMD5 调用时报错。交付版通过补全 RFC 2104 定义的 HMAC-MD5 实现(复用内置 MD5 与 WordArray),修复该问题。验证显示其输出与 Node.js crypto.createHmac('md5') 完全一致,共覆盖 90 组测试用例。实际支持算法包括 MD5