JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

React NativeのState(状態)とは?初期化からsetStateまでを実例付きで解説

State(状態)とは、アプリ内で扱うデータの出所となる場所であり、React Nativeアプリ開発において最も重要な概念の一つです。開発時には、stateをできるだけシンプルに保ち、状態を持つコンポーネント(ステートフルコンポーネント)の数を最小限に抑えることが推奨されます。

例えば、10個のコンポーネントがstateのデータを必要としている場合、各コンポーネントごとにstateを持たせるのではなく、すべてのデータを管理する1つのコンテナコンポーネントを作成し、そこでstateを一元管理するのが理想的な設計とされています。

例1:ボタンを押すとタイトルがON/OFFに切り替わる

stateは、以下のようにコンストラクタ内で初期化します。

constructor(props) {
    super(props);
    this.state = { isToggle: true };
}

ここでは、isToggleという真偽値(boolean)をstateに設定しています。ボタンのタイトルはこのisToggleプロパティの値によって決まり、trueであれば「ON」、falseであれば「OFF」と表示されます。

ボタンが押されるとonPressメソッドが呼び出され、その内部でsetStateが実行され、isToggleの値が更新されます。

onPress={() => {
    this.setState({ isToggle: !this.state.isToggle });
}}

ユーザーがボタンをクリックするとonPressイベントが発火し、setStateによってisToggleプロパティのstateが反転します。これにより、ボタンの表示がONとOFFの間で交互に切り替わる仕組みです。

App.js

import React, { Component } from "react";
import { Text, View, Button, Alert } from 'react-native';

class App extends Component {

    constructor(props) {
        super(props);
        this.state = { isToggle: true };
    }

    render(props) {
        return (
            <View style={{flex :1, justifyContent: 'center', margin: 15 }}>
                <Button
                    onPress={() => {
                        this.setState({ isToggle: !this.state.isToggle });
                    }}
                    title={
                        this.state.isToggle ? 'ON' : "OFF"
                    }
                    color="green"
                />
            </View>
        );
    }
}
export default App;

出力結果

ユーザーがボタンを押すたびに、ボタンの表示がONとOFFの間で切り替わります。

React NativeのState(状態)とは?初期化からsetStateまでを実例付きで解説

例2:テキストをクリックすると表示が変わる

次の例では、stateを以下のようにコンストラクタ内で初期化しています。

constructor(props) {
    super(props);
    this.state = { myState: 'Welcome to Tutorialspoint' };
}

このmyStateは、Textコンポーネントの中で以下のように表示されます。

<Text onPress={this.changeState} style={{color:'red', fontSize:25}}>{this.state.myState}</Text>

ユーザーがテキストをタップまたは押下するとonPressイベントが発火し、this.changeStateメソッドが呼び出されます。このメソッドは、setStateでmyStateを更新することにより、画面に表示されるテキストを書き換えます。

changeState = () => this.setState({myState: 'Hello World'})

App.js

import React, { Component } from "react";
import { Text, View, Button, Alert } from 'react-native';

class App extends Component {

    constructor(props) {
        super(props);
        this.state = { myState: 'Welcome to Tutorialspoint' };
    }
    changeState = () => this.setState({myState: 'Hello World'})
    render(props) {
        return (
            <View style={{flex :1, justifyContent: 'center', margin: 15 }}>
                <View>
                    <Text onPress={this.changeState} style={{color:'red', fontSize:25}}>
                        {this.state.myState}
                    </Text>
                </View>
            </View>
        );
    }
}
export default App;

出力結果

React NativeのState(状態)とは?初期化からsetStateまでを実例付きで解説

補足:関数コンポーネントとuseStateフックによる現代的な書き方

現在のReact Native開発では、クラスコンポーネントよりも関数コンポーネントとuseStateフックを使用するのが主流となっています。例1のコードは、以下のように簡潔に書き換えられます。

import React, { useState } from "react";
import { View, Button } from 'react-native';

const App = () => {
    const [isToggle, setIsToggle] = useState(true);
    return (
        <View style={{ flex: 1, justifyContent: 'center', margin: 15 }}>
            <Button
                onPress={() => setIsToggle(!isToggle)}
                title={isToggle ? 'ON' : 'OFF'}
                color="green"
            />
        </View>
    );
};

export default App;

useStateは、現在のstateの値と、それを更新するための関数をペアで返すフックです。クラスコンポーネントのようなconstructorやthisのバインディングが不要になるため、コードが大幅に読みやすく、保守しやすくなります。

  1. React Navigation 5 を使って React Native のナビゲーションを処理する方法

    React Nativeでナビゲーションを扱うときに真っ先に思い浮かぶライブラリといえば、React Navigationです。 筆者はこのライブラリの大ファンで、React Nativeのナビゲーション処理には常に最初の選択肢として採用しています。その理由の一つは、優れていて使いやすいAPIを備え、カスタマイズ性も非常に高いからです。 この記事を書くにあたったきっかけは、バージョン5がベータ版から安定版へと移行したことです。バージョン5にはいくつかの機能変更が加わり、ルートの宣言方法がシンプルかつ新しい設計のAPIへと生まれ変わりました。 本記事では、新しいAPIの概要と、アプリケーションで

  2. React Nativeで動画を背景に使う方法をわかりやすく解説

    この記事では、React Nativeで背景動画(backgroundVideo)を作成する方法を解説します。React Nativeを始めたばかりの方は、まず「React Nativeでモバイルアプリ開発を始めるために知っておくべきこと」といった入門記事を読んでおくと理解がスムーズになります。背景動画はアプリのUIに洗練された印象を与える演出手段です。広告の表示やユーザーへのメッセージ伝達など、さまざまな用途に活用できます。今回はPeletonアプリのホーム画面のようなデザインを目標に、実装方法を見ていきましょう。前提条件実装を始める前に、以下の環境が整っている必要があります。react-n