Open4

React & React Native

マキマキ

React Native

アーキテクチャ

https://tsurutan.me/articles/react-nativeno

新しくフォルダを作成後None of these files existが発生するが、下記で解決

expo start -c
もしくは
react-native start --reset-cache

androidの高さ調整

https://qiita.com/kuma_suke/items/10cae460f58d215e39cf

@expo/vector-iconsのアイコン名を型安全に扱う

https://zenn.dev/nkzn/articles/expo-vector-icons-typed-glyphmap
https://stackoverflow.com/questions/72078720/how-to-use-expo-vector-icons-dynamically-through-props-in-typescript-react-nati

routerの型宣言(typescript)

この辺参考に色々弄ってみた。動いているが正しいのか!?

import React from 'react'
import { NavigationContainer, RouteProp } from '@react-navigation/native'
import { createStackNavigator} from '@react-navigation/stack'
import { createBottomTabNavigator } from '@react-navigation/bottom-tabs'
import { FontAwesome } from '@expo/vector-icons'


import NewsScreen from './screens/NewsScreen'
import DetailScreen from './screens/DetailScreen'
import WeatherScreen from './screens/WeatherScreen'

const Stack = createStackNavigator()
const Tab = createBottomTabNavigator()

type GlyphNames = React.ComponentProps<typeof FontAwesome>['name']
type Route = RouteProp<Record<string, object | undefined>, string>

const newsStack = () => {
  return (
    <Stack.Navigator>
      <Stack.Screen name="ニュース" component={NewsScreen} />
      <Stack.Screen name="詳細ページ" component={DetailScreen} />
    </Stack.Navigator>
  )
}

const weatherStack = () => {
  return (
    <Stack.Navigator>
      <Stack.Screen name="天気予報" component={WeatherScreen} />
    </Stack.Navigator>
  )
}

const screenOptions = ({ route }: { route: Route }) => ({
  tabBarIcon: ({ color, size }: { color: string, size: number}) => {
    let iconName: GlyphNames | undefined

    if (route.name === 'ニュース') {
      iconName = 'newspaper-o'
    } else if (route.name === '天気予報') {
      iconName = 'sun-o'
    }
    return <FontAwesome name={iconName} size={size} color={color} />
  }
})

function App() {
  return (
    <NavigationContainer>
      <Tab.Navigator screenOptions={screenOptions}>
        <Stack.Screen name="ニュース" component={newsStack} />
        <Stack.Screen name="天気予報" component={weatherStack} />
      </Tab.Navigator>
    </NavigationContainer>
  );
}

export default App;

フォントのアウトライン

https://stackoverflow.com/questions/38755258/react-native-font-outline-textshadow

下部固定ボタンを置く

https://start-now.link/otonaprogramming/archives/317

文字列を読み上げる

https://qiita.com/Engineer_Grotle/items/8b63f9cdd1a886b069fc

useEffectのasync/await使用方法

https://zenn.dev/syu/articles/b97fb155137d1f