React Native Core Components

שלא כמו דף אינטרנט שעובד עם תגיות, אפליקציית react מציגה את רכיבי המסך על ידי קומפוננטות. ל-react יש קומפוננטות מובנות להצגת הדף.

View

הקומפוננטה הכי בסיסית להצגת אלמנטים על המסך. הקומפוננטה משמשת במיכל ומתפקדת בתור div. אפשר לקנן view אחד בתוך השני.

מכיוון שקומפוננטה יכולה להחזיר רכיב אחד, כדי להחזיר כמה רכיבים ביחד, אפשר לעטוף אותם על ידי view.

<View>
  <Text>Hello New React App</Text>
</View>

ל-view אפשר להוסיף styles. המשמעות של flex: 1 היא שהתוכן יקח את כל רוחב המסך.

import { Text, View } from "react-native";

export default function Index() {
  return (
    <View
      style={{
        flex: 1,
        justifyContent: "center",
        alignItems: "center",
      }}
    >
      <Text>Hello New React App</Text>
    </View>
  );
}

Text

קומפוננטת Text מכילה טקסט. אפשר לעצב אותה והיא יכולה להיות לחיצה.

<View>
   <Text style={{ color: "yellow" }}>Hello New React App</Text>
</View>

Image – ImageBackground

קומפוננטת Image מציגה תמונות.

import { Text, View, Image } from "react-native";
const logoImg = require("../assets/images/adaptive-icon.png");

export default function Index() {
  return (
    <View style={{ flex: 1, justifyContent: "center", alignItems: "center" }}>
      <Image source={logoImg} />
    </View>
  );
}

התמונה מופיעה, אבל היא גדולה מידי. נוסיף עיצוב.

<View style={{ flex: 1, justifyContent: "center", alignItems: "center" }}>
   <Image source={logoImg} style={{ width: 300, height: 300 }} />
</View>

הוספת תמונה ממקור אינטרנטי:

<View style={{ flex: 1, justifyContent: "center", alignItems: "center" }}>
   <Image source={{ uri: "https://picsum.photos/300"}} style={{ width: 300, height: 300 }} />
</View>

כשמוסיפים תמונות מקישור, חייב לציין גובה ורוחב.

הוספה תמונה כרקע:

<View style={{ flex: 1, justifyContent: "center", alignItems: "center" }}>
    <ImageBackground source={logoImg}>
        <Text>Text On Background</Text>
    </ImageBackground>
</View>

הרקע יתפוס את גודל המיכל. אם רוצים שהוא יתפוס את כל רקע המסך צריך לציין את זה עם flex.

<View style={{ flex: 1, justifyContent: "center", alignItems: "center" }}>
   <ImageBackground source={logoImg} style={{ flex: 1 }}>
        <Text>Text On Background</Text>
   </ImageBackground>
</View>

Scroll View

אם נסתכל על מבנה הדף הבא, נראה שיש לו תמונה, טקסט ותמונה. התמונה התחתונה לא ניראית כולה כי היא מחוץ למסך ואין לנו אפשרות לגלילה.

<View style={{ flex: 1, justifyContent: "center", alignItems: "center" }}>
      <Image source={logoImg} style={{ width: 300, height: 300 }} />
      <Text style={{ padding: 30 }}>
      Lorem ipsum dolor sit amet consectetur adipisicing elit. Maxime mollitia,
      molestiae quas vel sint commodi repudiandae consequuntur voluptatum laborum
      numquam blanditiis harum quisquam eius sed odit fugiat iusto fuga praesentium
      optio, eaque rerum! Provident similique accusantium nemo autem. Veritatis
      obcaecati tenetur iure eius earum ut molestias architecto voluptate aliquam
      nihil, eveniet aliquid culpa officia aut! Impedit sit sunt quaerat, odit,
      tenetur error, harum nesciunt ipsum debitis quas aliquid. Reprehenderit,
      quia. Quo neque error repudiandae fuga? Ipsa laudantium molestias eos 
      sapiente officiis modi at sunt excepturi expedita sint? Sed quibusdam
      recusandae alias error harum maxime adipisci amet laborum. Perspiciatis 
      minima nesciunt dolorem! Officiis iure rerum voluptates a cumque velit 
      quibusdam sed amet tempora. Sit laborum ab, eius fugit doloribus tenetur 
      fugiat, temporibus enim commodi iusto libero magni deleniti quod quam 
      consequuntur! Commodi minima excepturi repudiandae velit hic maxime
      doloremque. Quaerat provident commodi consectetur veniam similique ad 
      earum omnis ipsum saepe, voluptas, hic voluptates pariatur est explicabo 
      fugiat, dolorum eligendi quam cupiditate excepturi mollitia maiores labore 
      suscipit quas? Nulla, placeat. Voluptatem quaerat non architecto ab laudantium
      modi minima sunt esse temporibus sint culpa, recusandae aliquam numquam 
      totam ratione voluptas quod exercitationem fuga. Possimus quis earum veniam 
      quasi aliquam eligendi, placeat qui corporis!
      </Text>
      <Image source={logoImg} style={{ width: 300, height: 300 }} />
    </View>

הגלילה היא לא אוטומטית. כדי לאפשר גלילה צריך להשתמש בקומפוננטת ScrollView. את ה-ScrollView נכניס לתוך ה-View כדי שיהיו לו הגדרות עמוד כמו שצריך.

<View style={{ flex: 1, justifyContent: "center", alignItems: "center" }}>
  <ScrollView>
    <Image source={logoImg} style={{ width: 300, height: 300 }} />
    <Text style={{ padding: 30 }}>
    Lorem ipsum dolor sit amet consectetur adipisicing elit. Maxime mollitia,
    ...
    </Text>
    <Image source={logoImg} style={{ width: 300, height: 300 }} />
  </ScrollView>
</View>

Button

כפתור מאפשר להטריג פעולות. את הטקסט שעל הכפתור שולחים על ידי title. ערך נוסף שאפשר להשתמש בו הוא disabled.

<View style={{ flex: 1, justifyContent: "center", alignItems: "center" }}>
   <Button title="Press" onPress={() => console.log("Botton pressed")} color="blue" />
</View>

Pressable

אפשר להטריג אירועים גם בלחיצה על טקסט ותמונות.

<View style={{ flex: 1, justifyContent: "center", alignItems: "center", padding: 50 }}>
      <Button title="Press" onPress={() => console.log("Botton pressed")} color="blue" />

      <Pressable onPress={() => console.log("Image pressed")}>
        <Image source={logoImg} style={{ width: 300, height: 300 }} />
      </Pressable>

      <Pressable onPress={() => console.log("Text pressed")}>
        <Text style={{ color: "red" }}>Hello New React App</Text>
      </Pressable>
</View>

ל-pressable יש אפשרויות לטריגרים נוספים של onPressIn, onPressOut, onLongPress.

Modal

חלונות קופצים.

useState משמש לבדיקה האם החלון צריך להיות פתוח או סגור. כשלוחצים על הכפתור, קוראים ל-setIsModalVisible שהופך את הנראות ל-true.

כשלוחיצים על הכפתור בתוך החלון, יש קריאה ל-setIsModalVisible שהופכת את הניראות ל-false.

השימוש ב-onRequestClose הוא כדי לטפל במקרה שלחצים על כפתור "חזור" בטלפון.

import { useState } from "react";
import { Text, View, Button, Modal } from "react-native";

export default function Index() {
  const [isModalVisible, setIsModalVisible] = useState(false);

  return (
    <View style={{ flex: 1, justifyContent: "center", alignItems: "center", padding: 50 }}>
      <Button title="Press" onPress={() => setIsModalVisible(true)} color="blue" />

      <Modal 
        visible={isModalVisible}
        onRequestClose={() => setIsModalVisible(false)}>

        <View style={{ flex: 1, backgroundColor: "lightblue", padding: 50 }}>
          <Text>Modal Text</Text>
          <Button title="Close" onPress={() => setIsModalVisible(false)} color="midnightblue" />
        </View>
        
      </Modal>
    </View>
  );
}

תכונה שאפשר להשתמש בה היא animationType. אם נשלח את הערך slide נקבל אפקט של כניסה למסך.

ניווט במאמר

מאמרים אחרונים

Weekly Tutorial