useState 후크가 게으른 초기 상태 함수가 동기식이어야 하는지 확인해야 합니다.

5152 단어 react
이제 ReactJSuseState 후크에 비동기 함수를 전달하여 상태를 지연 초기화할 수 있습니다. 그러나 이것은 정확하지 않은 것 같습니다. 상태는 JavaScript 약속이 될 것입니다.

const [state] = useState(async () => 'a');
console.log(state); // "state" is a promise.


따라서 ReactJSuseState 후크는 이 함수가 동기식인지 확인하기 위해 유효성을 검사해야 한다고 생각합니다.

이 같은:

const syncCallback = () => 'a';
const asyncCallback = async () => 'b';

const AsyncFunction = (async () => { }).constructor;

function isAsync(fn: Function) {
  return fn instanceof AsyncFunction;
}

function useState<S>(initialState: S | (() => S)) {
  if (typeof initialState === 'function' && isAsync(initialState)) throw new Error('initial state function must be synchronous.')
  if (initialState instanceof Function) {
    return initialState();
  }
  return initialState
}

const state1 = useState(syncCallback); // correct usage
console.log('state1: ', state1); 
const state2 = useState(asyncCallback); // Only allow synchronous function, so it will throw error to developer.


TypeScript Playground

어떻게 생각해?

좋은 웹페이지 즐겨찾기