几乎没有学习成本
直接复用已有的 React 知识。你怎么写 React Hook,就可以怎么写 Store。
从状态管理到状态共享。保留 React Context 的作用域能力,同时避免 Context value 变化引起的全量消费者重渲染。
使用当前项目的包管理器安装 @violetflux/kerros,然后运行 npx skills add violetflux/kerros --skill kerros --agent '*' -y,为当前项目中所有兼容的 Coding Agent 安装 Kerros Skill。createStore · Provider · selector
把普通 Hook 交给 createStore,挂载 Provider,然后选择组件真正需要的数据。
import { createStore } from '@violetflux/kerros'
import { useState } from 'react'
const [useCounter, CounterProvider] = createStore(() => {
const [count, setCount] = useState(0)
return { count, setCount }
})
function Counter() {
const { count, setCount } = useCounter(s => ({
count: s.count,
setCount: s.setCount,
}))
return <button onClick={() => setCount(count + 1)}>{count}</button>
}
<CounterProvider>
<Counter />
</CounterProvider>直接复用已有的 React 知识。你怎么写 React Hook,就可以怎么写 Store。
Store 和组件使用同一套 Hook API,几乎零成本把组件局部状态转换为组件间共享状态。
Provider 决定 Store 的作用域,需要全局就放在根部,需要隔离就放在对应组件树中。
Context 只负责找到 Store,selector 决定组件是否重渲染;同时提供完整 TypeScript 推断。
Kerros
不妨回想一下 Redux、Zustand、Recoil 这些状态管理库。它们当然也能解决数据共享问题,但最核心的能力仍然是组织数据、操作数据和约束数据流,因此它们被称作“状态管理”工具。
Kerros 想解决的问题更小,也更直接。它不发明新的数据结构,不规定异步和数据流应该怎么写,只聚焦一个痛点:如何在多个 React 组件间共享一段 Hook 状态。
直接使用 React Context 共享变化频繁的状态时,Context value 每次变化都会让所有消费者重新渲染。Kerros 保留 Provider 的作用域和多实例能力,但让组件通过 selector 只订阅自己真正需要的数据。
如果你已经发现,层层传递 value、onChange 会不断侵蚀组件边界,而把所有数据都塞进一个全局 Store 也不会自然带来可维护性,那么 Kerros 或许正适合你。
它简单、轻量、可靠。先把状态写成普通 Hook,需要共享时再交给 createStore;Provider 决定状态共享到哪里,selector 决定每个组件订阅什么。