btoa()およびatob()の代替

概要

btoa()およびatob()はMDNにおいて非推奨


ASCII文字列しか対応していないため引数に日本語を与えたりするとエラーになる
developer.mozilla.org

 

対策

input属性のフォームから受け取った値をエンコード/デコードして返すサンプル

as-is

import React, { useState } from 'react';

const [text, setText] = useState('');

  const Encode = (e:any) => {
    setText(() => (btoa(e.target.value)));
  }

  const Decode = (e:any) => {
    setText(() => (atob(e.target.value)));
  }
 

to-be

Bufferを利用する形に変更

import React, { useState } from 'react';
import { Buffer } from 'buffer';

const [text, setText] = useState('');

  const Encode = (e:any) => {
    setText(() => (Buffer.from(e.target.value).toString('base64')));
  }

  const Decode = (e:any) => {
    setText(() => (Buffer.from(e.target.value, 'base64').toString('ascii')));
  }