演習18 React-NavigationのDrawerを使う

React-NavigationのStackと似ているのだが、①依存するライブラリーのインストールとと②設定をいじる必要がある。

 

Drawerを使用するなら、React-Navigationのバージョンはすべて@6でインストールしておかないとエラーに悩まされる。

 

Drawer Navigator | React Navigation

react-native-gesture-handler と、react-native-reanimatedをインストール

②babel.config.jsを下記のように①を追記する。

module.exports = function (api) {
  api.cache(true);
  return {
    presets: ['babel-preset-expo'],
    plugins: ['react-native-reanimated/plugin'], ・・・・①
  };
};

 

import { StatusBar } from 'expo-status-bar';
import { StyleSheet, Text, View, TextInput, Button, ScrollView } from 'react-native';
import { useState} from 'react';
import { createStackNavigator} from '@react-navigation/stack';
import { NavigationContainer} from '@react-navigation/native';
import {createDrawerNavigator} from '@react-navigation/drawer';

function HomeScreen(){
  return(
    <View>
      <Text>HomeScreen</Text>
    </View>
  )
}

function RegisterScreen(){
  return(
    <View>
      <Text>RegisterScreen</Text>
    </View>
  )
}

export default function App() {
  const Drawer = createDrawerNavigator();
  return (
   <NavigationContainer>
     <Drawer.Navigator>
       <Drawer.Screen name="Home" component={HomeScreen}/>
       <Drawer.Screen name="Register" component={RegisterScreen}/>
     </Drawer.Navigator>
   </NavigationContainer>

  );
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    backgroundColor: '#fff',
    alignItems: 'center',
    justifyContent: 'center',
  },
});
WordPressページへ移行中 https://yuuzaki2022.com/

演習17 少し大きなアプリを作成する

どんなアプリを作成するかというと、

Firebase Authenticationで認証を行い、それが認証されたら、アプリのホーム画面へ行ける。

ホーム画面に『登録画面』ボタンを配置し、それを押すと、登録画面へ遷移。

登録画面には、

タイトル(title)を記載するテキストエリアと

その下に、コード(code)を記載するテキストエリア、

その下に登録ボタンを配置するものとする。

それぞれのテキストを入力し、ボタンを押すと登録されるというものである。

これまで作成したものをつなぎ合わせるだけで作れそう。

 

 

GitHubに挙げておきます。

https://github.com/yuuzaki2000/FireAuthSample

WordPressページへ移行中 https://yuuzaki2022.com/

演習16 React Nativeで、テキストエリアを作成する

 

import { StatusBar } from 'expo-status-bar';
import { StyleSheet, Text, TextInput, View } from 'react-native';
import {useState} from 'react';

export default function App() {
  const [name, setName] = useState('');
  return (
    <View style={styles.container}>
      <Text>Open up App.js to start working on your app!</Text>
      <TextInput
           style={styles.textInput}
           multiline={true}
           numberOfLines={4}
           placeholder='文章を記載'
           value={name}
           onChangeText={text => setName(text)}/>
      <StatusBar style="auto" />
    </View>
  );
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    backgroundColor: '#fff',
    alignItems: 'center',
    justifyContent: 'center',
  },
  textInput: {
    borderWidth:1,
    height:400,
    width:100,
    margin:10,
    padding:10
  }
});

次にTailwind を組み合わせる

Tailwind CSS Textareaを検索すると、下記のページがあったのでそれを参考にする。

Tailwind CSS Textarea - Flowbite

import { StatusBar } from 'expo-status-bar';
import { StyleSheet, Text, TextInput, View } from 'react-native';
import {useState} from 'react';
import tw from 'twrnc';

export default function App() {
  const [name, setName] = useState('');
  return (
    <View style={styles.container}>
      <Text>Open up App.js to start working on your app!</Text>
      <TextInput
           style={tw`p-2.5 w-full text-sm text-gray-900 bg-gray-50 rounded-lg border border-gray-300 focus:ring-blue-500 focus:border-blue-500 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500`}
           multiline={true}
           numberOfLines={4}
           placeholder='文章を記載'
           value={name}
           onChangeText={text => setName(text)}/>
      <StatusBar style="auto" />
    </View>
  );
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    backgroundColor: '#fff',
    alignItems: 'center',
    justifyContent: 'center',
  }
});



演習15 React Nativeで、Tailwind CSSを使う

React Nativeで、Tailwind CSSを使用する場合、

Tailwind-rn あるいは、twrnc を使用する

前者は設定でつまづいたので、後者を使用する。configファイルが作成されないため設定はあまりできないが、使用しやすい。

 

自分でつくるのもよいが、これまでのテンプレートがいろいろ紹介されているページがあるので、そこを参考に作成するのがよい(コードは基本、HTMLコードで単純にコピペはできない)

 

import { StatusBar } from 'expo-status-bar';
import { StyleSheet, Text, View, Button, TextInput } from 'react-native';
import tw from 'twrnc';

export default function App() {
  return (
    <View style={styles.container}>
      <TextInput style={{borderWidth:1}}></TextInput>
      <Button title='PUSH'style={tw`mt-6 text-3xl font-extrabold text-neutral-600`}/>
      <StatusBar style="auto" />
    </View>
  );
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    backgroundColor: '#fff',
    alignItems: 'center',
    justifyContent: 'center',
  },
});

閑話休題 VSCodeとGitHubを連携できるようにする方法

下記HPを参考にしました。

VSCodeでGit・GitHubを使う方法を解説する【初心者向き】 (miya-system-works.com)

 

まず、GitがPCにない場合はインストールし、設定を行います。

次にGitのローカルリポジトリを作成します。

任意のフォルダを作成し、それをVSCodeから開く。

このフォルダを、Gitのローカルリポジトリとして初期化する。

このフォルダ内に、.gitというフォルダが作成されていることを確認。

作成した、Gitのローカルリポジトリに、ファイルを追加する。

GitHubと連携させたいファイル(HTML、JavaScriptなど;ここではファイルXとする)をステージングする。

次にコミットする。すると、VSCode内のボタンのテキストが、コミット⇒Branchの発行に変わった。

 

GitHubでリモートリポジトリを作成する

GitHubにログインし、新しいリモートリポジトリを作成します。

その際に、pushするためのコードをコピーしておきます。

Gitのローカルリポジトリと、GitHubのリモートリポジトリを紐づけます。

リモートリポジトリにpushします

Mainブランチを作成し、それにpushします

 

GitHubを開き、GitHubのリモートリポジトリに、ローカルリポジトリで作成したファイルXが表示されていることを確認。

 

 

変更は簡単になってます。

変更したファイルをステージングして、コミットボタンを押すだけ、いろいろなメッセージ出ますが処理すると変更可です。

 

 

演習13 React Nativeで、生のreduxで、actionありのreducerを作成し、ActionCreator、dispatchを定義する(途中)

ここでは、おなじみのカウンター(1ずつ増える機能のみ)を、わざわざ生のreduxを使って作ろうという試みです。

[今は、Reactでは、reduxは非推奨になっており、redux-toolkitが推奨になっているのに、わざわざという面はあるでしょうが、本質を学ぶためにはやはり必要ということでやっていきます]

 

まずは、通常の作り方をみていきます。(未掲載)

ボタンを押すと、ボタンのonPressプロパティ定義されている関数が実行されるようになっています。この場合は、ほかのコンポーネントのボタンも全くおなじ動作をさせる場合、これは、あくまで、ボタンという部品に依存した処理なので、それぞれのコンポーネント内でいちいち同じ記述をしないといけないことになります。

コンポーネント数が少なければ関係ないですが、多くなればなるほど、同じ処理をする場合が増えてくるのではないでしょうか?

さて、本題です。

⓪ 表示画面の作成です。

 

① Action と ActionCreator関数を作成します。

 一つのファイルで作成してみます。

 (プロジェクト名)/ redux /actions/ index.js

 

② Reducerの作成

 

 Reducerの役割は、以下の3つです。

 a. 唯一、stateを変更できる

   b.  stateの変更内容をあらかじめ場合分けしておける

   c. Javaでいうところのリスナーの機能を有する(JavaでいうActionEventが、JavaScriptのActionにあたります)

 

③ mapStateToProps、mapDispatchToPropsの定義と、App.jsとの接続

 なお、通常はContainerという役割をつとめるコンポーネントを作成して、redux関連処理はそちらに任せ、App.jsは表示に専念させるが通例ですが、ここでは、説明上わかりやすくするために、App.jsに両方の役割をさせます。

 

このような感じでやろうとおもってやっていたのですが、2023/10/1現在、connect関数が効かないようになっているので、おとなしくredux-toolkitへ移行します。

 

redux-toolkitを通しで初めてするなら、このYoutube動画です。

【Redux入門】初学者でも理解できるReduxの仕組みを解説します!(Redux Toolkitを使用) - YouTube