LoginSignup
2
2

More than 1 year has passed since last update.

React Nativeでreact-native-async-storageを使う

Last updated at Posted at 2021-11-30

(1)作成のきっかけ

普段はソーシャルワーカーとして障がいをお持ちの方の支援をしており、IT技術を使用して事業所の運営や支援に役立つようなことが実現できたらなと思っています。

以前、モバイルアプリを作成してみたいと思い、アップルストアに年間使用料を払って登録したのですが、なかなか時間がなくて💦これはもったいないなと思い、集中して一カ月ほどreact-nativeを勉強して、なんとかストアに登録することができたので、使用したライブラリについてなんかを書いてみようと思います。

(2)作成したモバイルアプリ

指定難病についての情報にアクセスするためのモバイルアプリです。11月1日に新たに難病が追加されることもあり、実際に難病の方の支援をすることもあるので、自身の勉強のためにも作成してみました。

(3)使った技術

・react-native
・Expo
・react-navigation
・react-native-maps
・react-native-multi-selectbox
・react-native-async-storage

などなどです、react-nativeやExpoの情報はバージョンによって動く動かないがあるので苦労しました。

(3)useContext の値を端末にも保存

タイトルの通り、react-native-async-storageを使用して、useContextでの状態管理の値を端末に保存します

// ./ModesContext"

import React, { createContext, useState, useEffect } from "react";
import AsyncStorage from "@react-native-async-storage/async-storage";

export const ModesContext = createContext();

export const ModesContextProvider = ({ children }) => {
  const [modes, setModes] = useState("");
  const saveModes = async (value) => {
    try {
      const jsonValue = JSON.stringify(value);
      await AsyncStorage.setItem("@modes-", jsonValue);
    } catch (err) {
      console.log("保存できませんでした", err);
    }
  };

  const loadModes = async () => {
    try {
      const value = await AsyncStorage.getItem("@modes-");
      if (value !== null) {
        setModes(JSON.parse(value));
      }
    } catch (err) {
      console.log("読み込めませんでした", err);
    }
  };

  const change = (mode) => {
    setModes(mode);
  };

  useEffect(() => {
    loadModes();
  }, []);

  useEffect(() => {
    saveModes(modes);
  }, [modes]);

  return (
    <ModesContext.Provider
      value={{
        modes,
        changeModes: change,
      }}
    >
      {children}
    </ModesContext.Provider>
  );
};

各画面で使うときは


// 包んであげてください
import { ModesContextProvider } from "./ModesContext";
<ModesContextProvider>
 <App>
</ModesContextProvider>

// 各画面で使うときは
import React, { useContext } from "react";
import { ModesContext } from "./ModesContext";

// 値を参照する
const { modes } = useContext(ModesContext);

// 値を変化させる
const { changeModes } = useContext(ModesContext);
changeModes((previousState) => !previousState);


端末に保存されているので次回起動時も設定が継続されます

(4)終わりに

アプリをストアに登録することで達成感がありました、Expoを使うことで簡単にストア登録ができたことは有難かったです。今回は自身の勉強とアプリを登録することを目的としましたが、次回はニーズに合わせたものを作りたいですね。いろいろ考えながら作っている時が一番楽しいですね:relaxed:

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