useList

resolveHookState

S | () => S | ((prevState: S) => S 형태로 다양하게 전달받을 수 있는 State Initializer, SetStateAction에 대응하기 위한 유틸리티 함수

// hookState.ts
export type HookStateInitialSetter<S> = () => S;
export type HookStateInitAction<S> = S | HookStateInitialSetter<S>;

export type HookStateSetter<S> = ((prevState: S) => S) | (() => S);
export type HookStateSetAction<S> = S | HookStateSetter<S>;

export type HookStateResolvable<S> =
  | S
  | HookStateInitialSetter<S>
  | HookStateSetter<S>;

export function resolveHookState<S>(nextState: HookStateInitAction<S>): S;
export function resolveHookState<S, C extends S>(
  nextState: HookStateSetAction<S>,
  currentState?: C
): S;
export function resolveHookState<S, C extends S>(
  nextState: HookStateResolvable<S>,
  currentState?: C
): S {
  if (typeof nextState === "function") {
    return nextState.length
      ? (nextState as Function)(currentState)
      : (nextState as Function)();
  }

  return nextState;
}

useForceUpdate

ref를 이용해 리스트 데이터를 관리하므로, 데이터가 변경되었을 때 forceUpdate()를 수행하게끔 해주어야 UI에 반영이 가능하다.

useList

참고 자료

Last updated