LeetCode-OpenSource/ayanami

新版本scope特性被移除了?

Closed this issue · 2 comments

新版本里useAyanami不支持传入scope了,是基于什么考虑去掉了这个特性呢?后续有没有替代方案支持组件间的数据隔离

Scope 特性让 Ayanami 的底层设计变得非常复杂,并且会极大的影响 SSR 性能。
新版下数据隔离可以设计在 State 中,配合新增的 Selector API 可以做到更细粒度的组件更新控制:

interface ScopedState {
  foo: string
  bar: number
}

interface State {
 [index: string]: ScopedState
}

@Module('Somenamespace')
class SomeModule extends Ayanami<State> {
  defaultState = {}
}

const { params: { id } } = useRouter()
useAyanami(SomeModule, {
 selector: (state) => state[id],
 mutateStateOnFirstRendering: (state: Draft<State>) => {
   if (!state[id]) {
     state[id] = defaultState
   }
 }
})