FEATURED · 精选文章

KStore 浏览器端存储:Kotlin/JS 与 Wasm 中 localStorage 全攻略

发布时间 / 2026/8/23 13:08:43
来源 / 创域科博编辑部
栏目 / 资讯中心
KStore 浏览器端存储:Kotlin/JS 与 Wasm 中 localStorage 全攻略 KStore 浏览器端存储Kotlin/JS 与 Wasm 中 localStorage 全攻略【免费下载链接】KStoreA tiny Kotlin multiplatform library that assists in saving and restoring objects to and from disk using kotlinx.coroutines, kotlinx.serialisation and kotlinx.io项目地址: https://gitcode.com/gh_mirrors/ks/KStoreKStore 是一个小巧的 Kotlin 多平台存储库在 Kotlin/JS 与 Wasm浏览器端中它通过 kstore-storage 模块把可序列化对象自动读写到 localStorage让你免写繁琐的 JSON 序列化与异常处理代码。本攻略带你从零完成依赖配置、创建存储、增删改查到监听更新的完整流程。为什么浏览器端要用 KStore浏览器没有文件系统直接复用kstore-file会编译失败。KStore 专门为此设计了kstore-storage模块 内置 Mutex 互斥锁避免并发读写竞争 内存缓存只读一次 localStorage之后直接复用 默认值机制没有记录也不会报错Flow流式监听天然适配 Compose / 响应式 UI项目包含三个模块浏览器端用后两个模块用途源码路径kstore核心 API锁、缓存、更新流kstore/src/commonMain/kotlin/io/github/xxfast/kstore/KStore.ktkstore-file磁盘文件存储Android/iOS/JVM/Nodekstore-file/src/commonMain/kotlin/io/github/xxfast/kstore/file/KStore.ktkstore-storage浏览器 localStorage 存储kstore-storage/src/commonMain/kotlin/io/github/xxfast/kstore/storage/KStore.ktJS 与 Wasm 的底层实现完全一致都映射到 W3C 标准的Storage接口见kstore-storage/src/jsMain/kotlin/io/github/xxfast/kstore/storage/Storage.kt与kstore-storage/src/wasmJsMain/kotlin/io/github/xxfast/kstore/storage/Storage.kt因此你学一套 API两个目标通吃。一键安装添加 kstore-storage 依赖在gradle/libs.versions.toml中声明版本库已发布在 Maven Central[versions] kstore x.x.x [libraries] kstore { module io.github.xxfast:kstore, version.ref kstore } kstore-storage { module io.github.xxfast:kstore-storage, version.ref kstore }如果你的项目同时面向桌面和 Web需要在 sourceSets 中拆分依赖——浏览器目标用kstore-storage其他目标用kstore-filesourceSets { val commonMain by getting { dependencies { implementation(libs.kstore) } } val jsMain by getting { dependencies { implementation(libs.kstore.storage) } } val wasmJsMain by getting { dependencies { implementation(libs.kstore.storage) } } } 纯浏览器 JS/Wasm 项目只需要上面两个依赖即可混合平台项目的完整配置思路可参考 docs/topics/installation.md。快速上手3 行代码创建 localStorage 存储定义一个可序列化模型然后调用storeOf(key ...)import io.github.xxfast.kstore.storage.storeOf import io.github.xxfast.kstore.storage.localStorage import kotlinx.serialization.Serializable Serializable data class Pet(val name: String, val age: Int) // key 就是 localStorage 中的键名默认使用 localStorage val store: KStorePet storeOf(key my_cats)工厂函数 storeOf 支持 4 个可选参数default无记录时的兜底值、enableCache是否启用缓存、format序列化格式默认 JSON、storage存储实例默认localStorage。增删改查get / set / update / delete所有操作都是挂起函数内部由互斥锁保护KStore 核心实现val mylo: Pet? store.get() // 读取 store.set(Pet(Mylo, 1)) // 写入 store.update { pet - pet?.copy(age pet.age 1) } // 事务式更新 store.delete() // 删除 store.reset() // 恢复为 default 值⚠️ 特别注意update它在同一把锁内完成读-改-写不会出现丢失更新的问题而get()后手动set()是两次独立事务。监听数据变化updates 流store.updates是一个Flow每次订阅都会强制重新读取 localStorage而非直接用缓存保证拿到最新值val pets: FlowPet? store.updates在 Compose for Web 中把它接入状态即可实现数据一变、UI 即刷新。列表存储KListStore 扩展让你告别手动 JSON 数组KStore 内置了列表扩展KListStore.kt对KStoreListT提供贴近 Kotlin 集合风格的 APIval pets: KStoreListPet storeOf(key cats) pets.plus(Pet(Oreo, 3)) // 追加 pets.minus(Pet(Oreo, 3)) // 移除 pets.get(0) // 按下标取值 pets.getOrEmpty() // 空存储返回空列表 pets.updatesOrEmpty // 非空 FlowListPet进阶配置缓存、默认值与自定义 storageval store storeOf( key settings, default Settings(darkMode true), // 无记录时的默认值 enableCache true, // false 则每次都直读 localStorage storage localStorage, // 可换成 sessionStorage 等任何 Storage )几个实用技巧传null语义set(null)会直接从 localStorage 移除该键而不是写入字符串null见 StorageCodec.kt。换 sessionStoragestoreOf(key temp, storage sessionStorage)会话结束自动清空。二进制格式默认 JSON 可读性好如需用 Protobuf/CBOR可自行实现CodecT接口后通过storeOf(codec ...)传入示例见 docs/topics/usage.md。常见坑与最佳实践key 要加命名空间localStorage 是整个域名共享的建议key com.myapp.my_cats避免与其他脚本撞键。把 store 交给 DI 管理store 是长生命周期对象重复创建会绕过缓存优势docs/topics/usage.md 官方建议。JS 与 Wasm 代码零差异两个平台的 actual 实现逐行相同共享代码里直接调用即可无需 expect/actual。想本地体验git clone https://gitcode.com/gh_mirrors/ks/KStore后查看kstore-storage/src/commonTest/下的测试用例它演示了编码、解码与清理的完整生命周期。总结KStore 用不到几十行的核心代码把 Kotlin/JS 与 Wasm 浏览器端的 localStorage 持久化做成了类型安全、线程安全的一等公民storeOf(key ...)建存储get/set/update读写updates流监听变化。配合kstore-file同一份业务代码即可横跨手机、桌面与浏览器——这正是 Kotlin 多平台最迷人的地方。【免费下载链接】KStoreA tiny Kotlin multiplatform library that assists in saving and restoring objects to and from disk using kotlinx.coroutines, kotlinx.serialisation and kotlinx.io项目地址: https://gitcode.com/gh_mirrors/ks/KStore创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED — 相关阅读

相关资讯

LATEST — 最新资讯

最新发布

TODAY — 本日精选

新闻

WEEKLY — 本周精选

新闻

MONTHLY — 本月精选

新闻