LoginSignup
2
2

More than 3 years have passed since last update.

React hooksのuseStateをuseReducerから作る

Posted at

はじめに

React hooksのドキュメントでは、 useState は basic hooks として、 useReducer は additional hooks として分類されています。ところが、実際の実装としては useReducer が基本実装で useState がラッパー実装となっているようで、プルリクなどでは useReducer のみが修正されていることがあるようでした。

useStateのラッパーを書いてみる

Reactのソースコードを読んだわけではありませんが、useStateをuseReducerのラッパーとして書いてみたらどうなるか試してみます。

import { useReducer } from "react";

const isFunction = f => typeof f === "function";

const reducer = (state, action) =>
  isFunction(action) ? action(state) : action;

export const useState = initialState => {
  const args = isFunction(initialState)
    ? [undefined, initialState]
    : [initialState];
  return useReducer(reducer, ...args);
};

思ったより、簡単にできました。

おわりに

繰り返しになりますが、Reactの実装を再現したものではありません。あくまで勉強用です。本物実装はさらにエラー処理や開発時チェックなどが追加されているかもしれません。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2