- 状态管理架构设计
- 全局状态管理:
- 在Qwik中,可以使用
useStore
来管理全局状态。例如,在最外层组件中创建一个全局状态的存储:
import { component$, useStore } from '@builder.io/qwik';
const GlobalStore = () => {
const globalState = useStore({
// 定义全局状态的属性
globalValue: 'default global value'
});
return null;
};
- 局部状态管理:
- 内层深度嵌套的组件使用
useStore
来管理自己独立的局部状态。比如:
import { component$, useStore } from '@builder.io/qwik';
const InnerComponent = () => {
const localState = useStore({
// 定义局部状态的属性
localValue: 'default local value'
});
return <div>{localState.localValue}</div>;
};
- 避免状态更新冲突
- 隔离状态更新逻辑:
- 全局状态的更新逻辑应该只在与全局状态相关的地方进行,例如最外层组件或者专门的全局状态管理函数中。同样,局部状态的更新逻辑应局限在内层组件内部。
- 例如,对于全局状态更新:
const updateGlobalValue = () => {
globalState.globalValue = 'new global value';
};
- 对于局部状态更新:
const updateLocalValue = () => {
localState.localValue = 'new local value';
};
- 使用独立的状态存储:
- 由于Qwik的
useStore
创建的是独立的状态存储,只要在更新时不混淆全局和局部状态的引用,就不会发生冲突。确保在更新全局状态时,不会意外修改局部状态,反之亦然。
- 不同层级组件间传递和监听状态变化
- 传递全局状态:
- 通过组件属性传递。从最外层组件开始,逐步将全局状态传递给内层组件。例如:
const OuterComponent = () => {
const globalState = useStore({
globalValue: 'default global value'
});
return <InnerComponent globalState={globalState} />;
};
- 监听全局状态变化:
- 内层组件可以通过
useEffect$
来监听传递进来的全局状态变化。例如:
import { component$, useStore, useEffect$ } from '@builder.io/qwik';
const InnerComponent = (props: { globalState: any }) => {
const localState = useStore({
localValue: 'default local value'
});
useEffect$(() => {
// 当props.globalState发生变化时执行的逻辑
console.log('Global state changed:', props.globalState.globalValue);
}, [props.globalState]);
return <div>{localState.localValue}</div>;
};
- 局部状态在组件内自行管理:
- 局部状态的变化监听和更新都在内层组件内部完成,不需要向外传递。例如,当局部状态
localValue
变化时,可以直接在内层组件的useEffect$
中监听:
useEffect$(() => {
console.log('Local state changed:', localState.localValue);
}, [localState.localValue]);