
こんにちは。iQeda [@iQeeeda] です。
React で User-Agent が使えない!?
これ、初心者がハマりがちな React あるあるです。
React は仮想 DOM を使うので、そのままだと DOM に含まれる User-Agent にアクセスできません。
今回は React で DOM にアクセスできる componentDidMount() 内で、
PC / スマホ / タブレット判定する User-Agent の使い方を紹介します。
React で User-Agent を使う方法

componentDidMount() というライフサイクルメソッド内で DOM にアクセスできます。
PC / スマホ / タブレット判定する
動かしているのは Next.js ですが、素の React でも同じ書き方ができると思います。
import React, {Component} from 'react';
class TestComponent extends Component {
constructor(props) {
super(props);
this.state = {
device: 'pc',
};
}
componentDidMount() {
const ua = window.navigator.userAgent.toLowerCase();
if (ua.indexOf('iphone') > 0 || ua.indexOf('ipod') > 0 || ua.indexOf('android') > 0 && ua.indexOf('mobile') > 0) {
this.setState({ device: 'sp' });
} else if (ua.indexOf('ipad') > 0 || ua.indexOf('android') > 0) {
// iOS12 まで
this.setState({ device: 'tab' });
} else if (ua.indexOf('ipad') > -1 || ua.indexOf('macintosh') > -1 && 'ontouchend' in document) {
// iOS13 以降
this.setState({ device: 'tab' });
} else {
this.setState({ device: 'pc' });
}
}
// 省略
User Agent を使って state に pc sp tab という文字列を設定しています。
iOS13 以降の iPad は User-Agent の判定方法が変わるのは要注意ですね。
お仕事ください!
僕が代表を務める 株式会社 EeeeG では Web 制作・システム開発・マーケティング相談を行っています。 なにかお困りごとがあれば、Twitter DM や Web サイトからお気軽にご相談ください。
カテゴリ「Develop」の最新記事

TerraformによるLinodeインスタンス新規作成サンプル
【Fingerprint】CircleCIがSSHできない問題解決
【Laravel】セッションタイムアウト後のログイン処理で前回URLに遷移するバグ修正
M1 Mac(2021)でanyenv/phpenvの初期設定!