useControllableState
统一受控与非受控两种状态模式。
签名
ts
function useControllableState<T>(
controlledState: T | undefined,
defaultValue: T | (() => T),
): [T, Dispatch<SetStateAction<T>>];基本用法
关键行为
- 当
controlledState为undefined时,行为与普通useState接近,由内部状态驱动。 - 当
controlledState有值时,返回值始终以外部传入值为准,setter 不会在内部保存新状态。 - 受控模式下使用函数式更新器时,更新函数仍会收到当前受控值,便于复用同一套更新逻辑。
注意事项
- 受控模式下调用 setter 只会触发一次重新渲染,真正的状态变化仍需要父组件更新传入值。
defaultValue只在非受控模式的首次初始化时生效。