View: چیست، ویژگی‌های کانتینر و React Native

نویسنده: IT Sectr منتشر شده: 2026-07-05 زمان مطالعه: 10 دقیقه

کامپوننت View در React Native بلوک ساختمانی پایه رابط کاربری، معادل عنصر div در HTML برای پلتفرم‌های موبایل است. View تودرتو در هر عمقی را پشتیبانی می‌کند، مکان‌دهی عناصر فرزند را از طریق Flexbox مدیریت می‌کند و رویدادهای لمسی را پردازش می‌کند. بر اساس React Native Docs, 2024، View پراستفاده‌ترین کامپوننت در برنامه‌ها است — تقریباً هر صفحه‌ای از کانتینرهای View تودرتو ساخته شده است. کامپوننت به UIView بومی در iOS و android.view.View در Android رندر می‌شود که عملکرد و دسترسی بومی را تضمین می‌کند.

نکات کلیدی

  • View — کانتینر پایه React Native، معادل div HTML برای صفحه‌های موبایل
  • کامپوننت از Flexbox برای مکان‌دهی عناصر فرزند پشتیبانی می‌کند
  • View به نمایش‌های بومی iOS و Android رندر می‌شود
  • از رویدادهای لمسی، حرکات و انیمیشن‌ها از طریق Animated API پشتیبانی می‌کند
  • View نمایش بصری پیش‌فرض ندارد — استایل‌ها از طریق StyleSheet تنظیم می‌شوند

View در React Native چیست

View کامپوننت بنیادی React Native است که به عنوان کانتینری برای سایر کامپوننت‌ها عمل می‌کند. این کامپوننت از استایل‌دهی از طریق StyleSheet، چیدمان از طریق Flexbox، پردازش لمس، انیمیشن‌ها و تغییر شکل‌ها پشتیبانی می‌کند. View یک لایه انتزاعی بر روی عناصر کانتینر بومی است: UIView در iOS و android.view.View در Android.

در React Native نمی‌توان از عناصر HTML استفاده کرد — در عوض همه چیدمان‌ها از View ساخته می‌شوند. حتی Text و Image معمولاً برای موقعیت‌دهی در View قرار می‌گیرند. کامپوننت می‌تواند خالی (فقط کانتینر) باشد یا هر تعداد عنصر فرزند با هر عمقی داشته باشد.

View از رندر روی هر دو پلتفرم از یک کد JavaScript پشتیبانی می‌کند. ویژگی‌های Flexbox، حاشیه‌ها، پس‌زمینه، سایه‌ها و مرزها در iOS و Android یکسان کار می‌کنند. تفاوت‌های پلتفرمی حداقل هستند — مثلاً سایه‌ها در iOS از shadowColor/shadowOffset استفاده می‌کنند و در Android از elevation.

بر اساس React Native Layout Docs, 2024، View برای دستگاه‌های موبایل بهینه شده است: در بهینه‌سازی flatten نمایش‌های بومی اضافی ایجاد نمی‌کند و به‌روزرسانی آبشاری را هنگام تغییر استایل‌های والد به درستی پردازش می‌کند.

ویژگی‌ها و API کامپوننت View

کامپوننت View مجموعه غنی از props برای مدیریت ظاهر، مکان و تعامل دارد. همه props به چند دسته تقسیم می‌شوند: استایلی، رویدادهای لمسی، دسترسی و ویژگی‌های پلتفرمی. بیایید گروه‌های کلیدی را بررسی کنیم.

props استایلی View

View از تمام ویژگی‌های CSS استاندارد برای پلتفرم‌های موبایل پشتیبانی می‌کند. اصلی‌ترین آنها: flexDirection، justifyContent، alignItems برای موقعیت‌دهی؛ margin، padding برای حاشیه‌ها؛ backgroundColor، borderRadius برای ظاهر؛ width، height، maxHeight برای اندازه‌ها.

رویدادهای لمسی و حرکات

View می‌تواند رویدادهای لمسی را از طریق propsهای onStartShouldSetResponder، onMoveShouldSetResponder و onResponderGrant پردازش کند. این رویدادها امکان پیاده‌سازی حرکات سفارشی بدون کتابخانه را فراهم می‌کنند. برای کلیک‌های استاندارد از onTouchStart، onTouchEnd و onPress (از طریق Pressable یا TouchableOpacity) استفاده می‌شود.

props پلتفرمی

در iOS برای سایه‌ها shadowColor، shadowOffset، shadowOpacity، shadowRadius در دسترس هستند. در Android این ویژگی‌ها نادیده گرفته می‌شوند — به جای آنها از elevation استفاده می‌شود. callbackهای onLayout هنگام تغییر اندازه View فراخوانی می‌شوند که برای چیدمان‌های تطبیقی مفید است.

چیدمان با View و Flexbox

Flexbox تنها مکانیزم چیدمان در React Native است (برخلاف Web که Grid و Float در دسترس هستند). تمام موقعیت‌دهی عناصر از طریق ویژگی‌های Flexbox کامپوننت View انجام می‌شود. به طور پیش‌فرض flexDirection در View روی column تنظیم شده است، نه row مانند Web، که با جهت عمودی صفحه‌های موبایل مطابقت دارد.

ویژگی‌های اصلی Flexbox در View

flexDirection جهت محور اصلی را تعیین می‌کند: column (پیش‌فرض) یا row. justifyContent توزیع را در امتداد محور اصلی مدیریت می‌کند (flex-start، center، space-between). alignItems — در امتداد محور عرضی (stretch — مقدار پیش‌فرض). flex سهم فضای موجود برای عنصر فرزند را تعیین می‌کند.

js
import React from 'react';
import { View, Text, StyleSheet } from 'react-native';

const CardLayout = () => (
    <View style={styles.card}>
        <View style={styles.row}>
            <View style={styles.avatar} />
            <View style={styles.content}>
                <Text style={styles.name}>John Doe</Text>
                <Text style={styles.role}>Developer</Text>
            </View>
        </View>
    </View>
);

در مثال ساختار معمولی نشان داده شده است: View بیرونی — کارت، row داخلی — سطر با آواتار و بلوک متنی، content — ستون با نام و نقش. چنین ساختار تودرتوی View استاندارد هر صفحه React Native است.

تفاوت‌های View با div HTML

اگرچه View از نظر مفهومی شبیه div HTML است، تفاوت‌های کلیدی بین آنها وجود دارد که هنگام انتقال کد از Web به React Native مهم است. این تفاوت‌ها به رندر، استایل‌ها و رفتار پیش‌فرض مربوط می‌شوند.

ویژگیView (React Native)div (HTML)
flexDirection پیش‌فرضcolumnrow (در زمینه block)
width/heightپیش‌فرض 100% از والدauto بر اساس محتوا
اسکرولپشتیبانی نمی‌شود (نیاز به ScrollView)overflow: auto/scroll
سایه‌هاiOS: shadow*، Android: elevationbox-shadow
پردازش رویدادهاسیستم Responderرویدادهای DOM
رندر بومیUIView / android.view.Viewعنصر DOM

مهمترین تفاوت — پیش‌فرض flexDirection: column. این بدان معناست که بدون تنظیم صریح، عناصر فرزند به صورت عمودی قرار می‌گیرند، نه افقی. تفاوت دوم: width و height View به طور پیش‌فرض به تمام فضای موجود والد گسترش می‌یابند (معادل width: 100% در CSS).

مثال‌های عملی با View

دو مثال واقعی از استفاده از View در برنامه‌های React Native را بررسی می‌کنیم: وسط‌چین کردن محتوا در تمام صفحه و ایجاد شبکه تطبیقی از کارت‌ها. هر دو الگو در هر پروژه‌ای یافت می‌شوند.

مثال 1: صفحه placeholder با وسط‌چین کردن

برای ایجاد حالت خالی (empty state) از View با flex: 1 و وسط‌چین کردن در هر دو محور استفاده می‌شود. این الگوی استاندارد برای صفحه‌های بارگذاری، خطا و لیست‌های خالی است.

js
const EmptyState = ({ message }) => (
    <View style={styles.container}>
        <Text style={styles.icon}>{icon}</Text>
        <Text style={styles.message}>{message}</Text>
    </View>
);

const styles = StyleSheet.create({
    container: { flex: 1, justifyContent: 'center', alignItems: 'center' },
    icon: { fontSize: 48 },
    message: { fontSize: 16, color: '#666', marginTop: 16 },
});

ترکیب justifyContent: center و alignItems: center در View با flex: 1 محتوا را در هر دو محور در کل صفحه وسط‌چین می‌کند. این رایج‌ترین الگوی استفاده از View در React Native است.

مثال 2: شبکه کارت‌ها با Flexbox

برای نمایش دو ستونه محصولات یا مقالات از View با flexDirection: row، flexWrap: wrap و Viewهای فرزند با عرض ثابت استفاده می‌شود. این الگو جایگزین CSS Grid در React Native است.

js
const ProductGrid = ({ products }) => (
    <View style={styles.grid}>
        {products.map((product) => (
            <View key={product.id} style={styles.card}>
                <Image source={{ uri: product.image }} />
                <Text>{product.name}</Text>
            </View>
        ))}
    </View>
);

const styles = StyleSheet.create({
    grid: {
        flexDirection: 'row',
        flexWrap: 'wrap',
        justifyContent: 'space-between',
    },
    card: { width: '48%', marginBottom: 16 },
});

در این مثال View بیرونی با flexWrap: wrap مانند معادل CSS Grid عمل می‌کند. هر کارت 48% عرض را اشغال می‌کند و فاصله‌هایی بین ستون‌ها باقی می‌گذارد. این الگوی معمول برای کاتالوگ‌ها و خوراک محتوا است.

سوالات متداول

View در React Native چه تفاوتی با div دارد؟

View به طور پیش‌فرض flexDirection: column دارد (نه row مانند کانتینر flex در HTML)، از اسکرول پشتیبانی نمی‌کند، width پیش‌فرض به 100% والد گسترش می‌یابد و سایه‌ها از طریق ویژگی‌های shadow* در iOS و elevation در Android تنظیم می‌شوند.

آیا View می‌تواند کلیک‌پذیر باشد؟

بله، View از پردازش رویدادهای لمسی از طریق onTouchStart، onTouchEnd و سیستم Responder پشتیبانی می‌کند. با این حال برای دکمه‌ها بهتر است از TouchableOpacity، Pressable یا Button استفاده کنید — آنها بازخورد بصری ارائه می‌دهند و با Accessibility API سازگار هستند.

آیا باید برای هر عنصر از View استفاده کرد؟

الزامی نیست. React Native رندر را از طریق View flattening بهینه می‌کند — Viewهای اضافی بدون استایل و رویداد از درخت بومی حذف می‌شوند. با این حال برای خوانایی کد بهتر است از View به عنوان کانتینر برای بلوک‌های منطقی رابط استفاده کنید.

چگونه View گرد بسازیم؟

borderRadius را برابر نصف عرض و ارتفاع تنظیم کنید (مثلاً width: 50، height: 50، borderRadius: 25). اگر عرض و ارتفاع یکسان باشند، چنین View به دایره تبدیل می‌شود. برای آواتارها این الگوی استاندارد است.

چگونه View را شفاف کنیم؟

opacity را از 0 تا 1 تنظیم کنید (مثلاً opacity: 0.5). همچنین می‌توانید از backgroundColor با RGBA استفاده کنید (backgroundColor: 'rgba(0,0,0,0.5)'). تفاوت این است که opacity به کل کانتینر و محتوای آن اعمال می‌شود، در حالی که RGBA فقط به پس‌زمینه.

خلاصه

  • View — کانتینر پایه React Native، معادل div HTML برای ساخت رابط‌ها
  • کامپوننت از Flexbox با flexDirection: column پیش‌فرض پشتیبانی می‌کند
  • View به UIView بومی (iOS) و android.view.View (Android) رندر می‌شود
  • propsهای کلیدی: ویژگی‌های استایلی Flexbox، رویدادهای لمسی از طریق سیستم Responder، onLayout برای اندازه‌ها
  • View flattening به طور خودکار کانتینرهای اضافی را از درخت بومی حذف می‌کند
  • برای دکمه‌ها از TouchableOpacity یا Pressable به جای View با onTouch استفاده کنید
  • Viewهای تودرتو — معماری استاندارد هر صفحه در برنامه React Native

ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد

IT Sectr از سال 2017 برنامه‌های iOS و Android را برای استارتاپ‌ها و کسب‌وکارها ایجاد می‌کند. ما به شما مشاوره می‌دهیم و بهترین راه‌حل را پیشنهاد خواهیم کرد.

بحث درباره پروژه

همچنین بخوانید