🤠

react-cookieでcookie管理をする。

2021/09/18に公開

どんな時にcookie管理が必要?

cookie管理は認証周りの実装に必要不可欠です。
特にフロントエンドとバックエンドが分かれている場合では、
バックエンドからトークンを取得しそのトークンをcookieに保存することで、
そのサイトにアクセスするためにユーザーが行う認証を省くことができるのです。
今回はトークンを取得するとなるとテーマから逸れてしまうので、
実際にreact-cookieというreactライブラリを使用したcookie管理を紹介します。

create-react-appでサクッと環境構築

npx create-react-app cookie-practice
cd cookie-practice

react-cookieをインストール

公式はこちら

npm install react-cookie
	or
yarn add react-cookie

index.jsに追記

まず、index.jsに{CookiesProvider}をインポートします。
<CookiesProvider>で<App/>を囲うことで、
<App/>内でreact-cookieが適用されます。

index.js
import React from "react";
import ReactDOM from "react-dom";
import "./index.css";
import App from "./App";
import reportWebVitals from "./reportWebVitals";
+ import { CookiesProvider } from "react-cookie";

ReactDOM.render(
  <React.StrictMode>
+   <CookiesProvider>
      <App />
+   </CookiesProvider>
  </React.StrictMode>,
  document.getElementById("root")
);

// If you want to start measuring performance in your app, pass a function
// to log results (for example: reportWebVitals(console.log))
// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
reportWebVitals();

App.jsに追記

今回は作るアプリでは、
フォームに名前を入力し、
保存ボタンを押すとcookieに名前が保存→ボタンの横に名前が表示されます。
削除ボタンを押すとcookieに保存した名前が削除されるシンプルなものです。

inputタグに入力された値はuseStateで管理します。
cookieの管理はuseCookiesというHooksを使用することで、
簡単にcookieの保存、削除を実装できます。

App.js
import React, { useState } from "react";
import { useCookies } from "react-cookie";
import "./App.css";

function App() {
  const [name, setName] = useState();
  const [cookies, setCookie, removeCookie] = useCookies();

  const handlerChange = (e) => {
    setName(e.target.value);
  };
  const handlerDelete = () => {
    removeCookie("name");
  };
  const handleSubmit = () => {
    setCookie("name", name);
  };

  return (
    <div className="App">
      <form onSubmit={handleSubmit}>
        <label>
          <input type="text" name="name" onChange={handlerChange} />
        </label>
        <input type="submit" value="保存" />
        <button onClick={handlerDelete}>削除</button>
        {cookies.name}
      </form>
    </div>
  );
}

export default App;

まとめ

実務では、
認証周りでトークンを保存する際などに有効です。
バックエンドによってはこの実装が必要のないパターンもあるかもしれませんが、
念のため選択肢とするに越したことはないでしょう。

Discussion