Skip to content

useControllableState

统一受控与非受控两种状态模式。

签名

ts
function useControllableState<T>(
  controlledState: T | undefined,
  defaultValue: T | (() => T),
): [T, Dispatch<SetStateAction<T>>];

基本用法

关键行为

  • controlledStateundefined 时,行为与普通 useState 接近,由内部状态驱动。
  • controlledState 有值时,返回值始终以外部传入值为准,setter 不会在内部保存新状态。
  • 受控模式下使用函数式更新器时,更新函数仍会收到当前受控值,便于复用同一套更新逻辑。

注意事项

  • 受控模式下调用 setter 只会触发一次重新渲染,真正的状态变化仍需要父组件更新传入值。
  • defaultValue 只在非受控模式的首次初始化时生效。