🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
React Native

React Nativeは、ネイティブモバイルアプリ(iOS/Android)を作成できるJavaScriptフレームワークです。Reactと同じ設計のため、宣言的なコンポーネントでリッチなUIを開発することが可能です。

Q&A

解決済

1回答

623閲覧

【React Native】AsyncStorageへの保存方法

tiipein

総合スコア11

React Native

React Nativeは、ネイティブモバイルアプリ(iOS/Android)を作成できるJavaScriptフレームワークです。Reactと同じ設計のため、宣言的なコンポーネントでリッチなUIを開発することが可能です。

0グッド

0クリップ

投稿2019/10/20 14:39

前提・実現したいこと

名前入力とカウンター回数をAsyncStorageに保存したいと考えています。

発生している問題・エラーメッセージ

ボタンを押すと'{this.state.counter}'で表示されている数字は正常にカウントされるのですが、
SimulatorをRefreshすると、0になってしまいます。
また名前を入力してもSimulatorをRefreshすると消えてしまいます。

エラーメッセージ

該当のソースコード

import React from 'react';
import { StyleSheet,
Text,
View,
KeyboardAvoidingView,
Platform,
TouchableOpacity,
AsyncStorage}from 'react-native';

import { Input} from 'react-native-elements';
import Button from "./components/Button";

const TASK = "@taskApp:task";
export default class App extends React.Component{

constructor(props){
super(props)

this.state = {
counter: 1,
inputText:"",
}
}

async componentDidMount(){
this.loadTask();}

saveTask = async(TASK, taskString) => {
try{
let taskString = JSON.stringify(this.state);
await AsyncStorage.setItem(TASK, taskString)
console.log(AsyncStorage);
} catch(e){
console.log(this.state);
}
}

loadTask = async(TASK) => {
try{
let taskString = await AsyncStorage.getItem(TASK);
if(taskString){
let task = JSON.parse(taskString);
this.setState({counter: Number(taskString)});
}
} catch(e){
console.log(e);
}
}

componentDidMount(){
this.setState({
counter: 0
})
}

plus = () => {
this.setState({
counter: this.state.counter + 1
})
}

minus = () => {
if( this.state.counter > 0 ){
this.setState({
counter: this.state.counter - 1
})
}}

reset = () => {
this.setState({
counter: this.state.counter = 0
})
};

render(){
// let taskList = this.state.taskList;
const platform = Platform.OS === 'ios' ? 'ios':'android';

return (
<KeyboardAvoidingView style={styles.container} behavior="padding">

<View style={styles.input}> <Input style={styles.inputText} onChangeText={(text) => this.setState({inputText: text})} value={this.state.inputText} /> </View> <Text style={styles.counter}>{this.state.counter}</Text> <View style={styles.btnWrap}> <Button text="+" function={this.plus} style={{backgroundColor: "blue"}} /> <Button text="-" function={this.minus} style={{backgroundColor: "red"}} /> <Button text='reset' function = {this.reset} style={{backgroundColor:"green"}}> </Button> </View> </KeyboardAvoidingView>);} }
ソースコード

試したこと

Refreshするとカウンターは0に戻ります。またテキスト入力が消えます。どうしてもAsyncStoregeに保存させる方法がわかりません。
続きからの数字を表示し、テキスト入力をAsyncStorageに保存したいです。
アドバイスいただけたら幸いです。 よろしくお願いいたします。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

こんにちは

解決するかどうかは分かりませんが、「これを試してみては?」という策を回答します。
React Native 公式ドキュメントのAsyncStorage の冒頭に以下のように書かれています。

Deprecated. Use react-native-community/react-native-async-storage instead.

上記に従って、'react-native' から import した AsyncStorage は使わずにreact-native-community から提供されるAsyncStorageに換えてみるといかがでしょうか。

以下に、インストール方法、使い方などが書かれています。

参考になれば幸いです。

投稿2019/10/20 14:52

編集2019/10/20 15:21
jun68ykt

総合スコア9058

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tiipein

2019/10/21 00:54

react-native-storageを使ったら、簡単に問題を解決できました。どうもありがとうございました。
jun68ykt

2019/10/21 00:58

どういたしまして。解決されたとのことで、よかったです????
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問