← Back to list

วิธีสร้าง Bottom Tabs และ Stack Screen สำหรับ Mobile App บน React Native (Part 2)

จาก Part ที่แล้ว เราได้ทำ Bottom Tabs ไปเป็นที่เรียบร้อยแล้ว ทีนี้เราจะมาทำ Stack Screen ที่อยู่ในแต่ละ Tab เนื่องจากในแต่ละ Tab…

Surayut Prasong · 2022-02-27 08:02 · 0 claps · 2.6 min read
#react-native #bottom-tab #stack-screen #navigation #mobile-apps
Open on Medium ↗
Wiki topics: 🌐 · Web Development 📱 · Mobile Development

วิธีสร้าง Bottom Tabs และ Stack Screen สำหรับ Mobile App บน React Native (Part 2)

จาก Part ที่แล้ว เราได้ทำ Bottom Tabs ไปเป็นที่เรียบร้อยแล้ว ทีนี้เราจะมาทำ Stack Screen ที่อยู่ในแต่ละ Tab เนื่องจากในแต่ละ Tab ที่เราทำอาจมี screen มากกว่า 1 screen ครับ

เริ่มจากติดตั้ง Package ที่จำเป็น

react-native-gesture-handler

ผมจะยกตัวอย่างโดยการเพิ่ม screen ไปที่ chat โดยใช้ชื่อว่า MessageScreen.js

src
└─ screens
   └─ chat
      ├─ MessageScreen.js
      ├─ ChatScreen.js
      └─ styles.js

MessageScreen.js

import { Text, View } from 'react-native'
import styles from './styles'
export default function MessageScreen(props) {
  return (
    <View style={styles.container}>
      <Text style={{ fontSize: 30, fontWeight: 'bold' }}>Messages</Text>
    </View>
  )
}

แก้ไขไฟล์ index.js

export { default as HomeScreen } from './home/HomeScreen'
export{ default as ChatScreen } from './chat/ChatScreen'
export{ default as MessageScreen } from './chat/MessageScreen'
export{ default as ProductScreen } from './product/ProductScreen'
export{ default as SettingScreen } from './setting/SettingScreen'

สร้างไฟล์ StackScreenContainer.js ไว้ในโฟลเดอร์ container

src
└─ container
   └─ MainContainer.js
   └─ StackScreenContainer.js

StackScreenContainer.js

import React from "react"
import { createStackNavigator } from "@react-navigation/stack"
import { HomeScreen, ChatScreen, MessageScreen, ProductScreen, SettingScreen } from "../screens"
const Stack = createStackNavigator()
export { }

เราจะเพิ่ม Stack Screen แล้วทำการ export

const Stack = createStackNavigator()
const HomeStackScreen = () => {
  return (
    <Stack.Navigator screenOptions={({ route }) => ({

      headerShown: false
    })}>
      <Stack.Screen name='HomeScreen'>{props => <HomeScreen {...props} />}</Stack.Screen>
    </Stack.Navigator>
  )
}
export { HomeStackScreen }

เพิ่ม Stack Screen ให้ครบทุก Tab

         ...
         ...
const ChatStackScreen = () => {
  return (
    <Stack.Navigator screenOptions={({ route }) => ({
      headerShown: false
    })}>
      <Stack.Screen name='ChatScreen'>{props => <ChatScreen {...props} />}</Stack.Screen>
    </Stack.Navigator>
  )
}
const ProductStackScreen = () => {
  return (
    <Stack.Navigator screenOptions={({ route }) => ({
      headerShown: false
    })}>
      <Stack.Screen name='ProductScreen'>{props => <ProductScreen {...props} />}</Stack.Screen>
    </Stack.Navigator>
  )
}
const SettingStackScreen = () => {
  return (
    <Stack.Navigator screenOptions={({ route }) => ({
      headerShown: false
    })}>
      <Stack.Screen name='SettingScreen'>{props => <SettingScreen {...props} />}</Stack.Screen>
    </Stack.Navigator>
  )
}
export { HomeStackScreen, ChatStackScreen, ProductStackScreen, SettingStackScreen }

เราจะเพิ่ม MessageScreen.js ไปใน ChatStackScreen

               ...
               ...
const ChatStackScreen = () => {
  return (
    <Stack.Navigator screenOptions={({ route }) => ({
      headerShown: false
    })}>
      <Stack.Screen name='ChatScreen'>{props => <ChatScreen {...props} />}</Stack.Screen>
      <Stack.Screen name='MessageScreen'>{props => <MessageScreen {...props} />}</Stack.Screen>
    </Stack.Navigator>
  )
}

เราจะใช้ <Stack.Screen> เพื่อเพิ่ม Screen ที่จำเป็นต้องใช้ใน Tab นั้น ๆครับ

ทำการแก้ไข import Screens ไปเป็น import Stack Screens ที่ไฟล์ MainContainer.js

import { HomeScreen, ChatScreen, ProductScreen, SettingScreen } from "../screens" //ลบส่วนนี้
import { HomeStackScreen, ChatStackScreen, ProductStackScreen, SettingStackScreen } from "./StackScreenContainer"

และแก้ไข <Tab.Screen>

<Tab.Screen name='Home' children={() => HomeStackScreen()} />
<Tab.Screen name='Chat' children={() => ChatStackScreen()} />
<Tab.Screen name='Product' children={() => ProductStackScreen()} />
<Tab.Screen name='Setting' children={() => SettingStackScreen()} />

ลองรันโปรแกรมด้วย yarn start จะเห็นว่าหน้าตาแสดงผลยังคงเหมือนเดิม

ทีนี้เราจะเพิ่มปุ่มไปที่หน้า Chat เมื่อกดปุ่ม หน้าจอจะแสดงผลหน้า Messages

ChatScreen.js

import { Button, Text, View } from 'react-native'
import styles from './styles'
export default function ChatScreen(props) {
  return (
    <View style={styles.container}>
      <Text style={{ fontSize: 30, fontWeight: 'bold' }}>Chat</Text>
      <Button
        title='Open Chat'
        onPress={() => props.navigation.navigate('MessageScreen')} 
      />
    </View>
  )
}

ที่หน้า Chat จะมีปุ่ม OPEN CHAT

เมื่อกดปุ่ม OPEN CHAT หน้าจอจะแสดงผลหน้า Messages

เรายังสามารถส่งค่าจากหน้า Chat ไปที่ Message ได้ด้วยครับ

<Button
  title='Open Chat'
  onPress={() => props.navigation.navigate('MessageScreen', {text: 'Value from Chat'})}
/>

MessageScreen.js

return (
  <View style={styles.container}>
    <Text style={{ fontSize: 30, fontWeight: 'bold' }}>Messages</Text>
    <Text>{props.route.params.text}</Text>
  </View>
)

เรียบร้อยครับ สำหรับวิธีสร้าง Bottom Tabs และ Stack Screen สำหรับ Mobile App บน React Native หวังว่าจะเป็นประโยชน์ให้กับหลาย ๆคนที่กำลังศึกษา React Native อยู่นะครับ ผมจะพยายามเอาความรู้ที่มีมาแชร์เรื่อย ๆนะครับผม


메타데이터
post_id
2d6daec733d3
slug
วิธีสร้าง-bottom-tabs-และ-stack-screen-สำหรับ-mobile-app-บน-react-native-part-2-2d6daec733d3
url
https://medium.com/@srydev.prasong/%E0%B8%A7%E0%B8%B4%E0%B8%98%E0%B8%B5%E0%B8%AA%E0%B8%A3%E0%B9%89%E0%B8%B2%E0%B8%87-bottom-tabs-%E0%B9%81%E0%B8%A5%E0%B8%B0-stack-screen-%E0%B8%AA%E0%B8%B3%E0%B8%AB%E0%B8%A3%E0%B8%B1%E0%B8%9A-mobile-app-%E0%B8%9A%E0%B8%99-react-native-part-2-2d6daec733d3
canonical_url
https://medium.com/@srydev.prasong/%E0%B8%A7%E0%B8%B4%E0%B8%98%E0%B8%B5%E0%B8%AA%E0%B8%A3%E0%B9%89%E0%B8%B2%E0%B8%87-bottom-tabs-%E0%B9%81%E0%B8%A5%E0%B8%B0-stack-screen-%E0%B8%AA%E0%B8%B3%E0%B8%AB%E0%B8%A3%E0%B8%B1%E0%B8%9A-mobile-app-%E0%B8%9A%E0%B8%99-react-native-part-2-2d6daec733d3
author_url
https://medium.com/@srydev.prasong
status
ok
fetched_at
2026-06-28 10:39:35