aedev.net
  • Trang chủ
  • AI
  • Mobile
  • Flutter
  • React Native
  • Backend
  • DevOps
  • Hướng dẫn
No Result
View All Result
SAVED POSTS
aedev.net
  • Trang chủ
  • AI
  • Mobile
  • Flutter
  • React Native
  • Backend
  • DevOps
  • Hướng dẫn
No Result
View All Result
aedev.net
No Result
View All Result
Minh hoạ style và layout trong React Native với màn hình mobile, spacing và typography

React Native Platform.select: native và default được chọn theo thứ tự nào?

Suong Nguyen by Suong Nguyen
08/11/2026
in React Native
0
585
SHARES
3.2k
VIEWS
Summarize with ChatGPTShare to Facebook

Bạn đặt padding chung trong nhánh native, rồi thêm riêng màu nền cho ios. Khi chạy iOS, padding không xuất hiện như dự đoán. Điểm dễ hiểu nhầm là Platform.select chọn một giá trị phù hợp, chứ không tự gộp object ở các nhánh thành một cấu hình cuối cùng.

Bài đối chiếu tài liệu React Native 0.88 và mã nguồn tag v0.88.0 ngày 08/11/2026. Ví dụ JSX được rà theo API; chưa chạy Metro, Hermes, build native, simulator hoặc kiểm tra giao diện trên thiết bị. Các kết quả dưới đây là điều cần quan sát khi chạy thử theo hợp đồng tài liệu.

Đọc thứ tự ưu tiên trên điện thoại

Theo Platform API, trên iOS và Android, nhánh đúng tên nền tảng được ưu tiên; nếu không có, chọn native, rồi đến default. Hướng dẫn code theo nền tảng cũng mô tả cách tổ chức khác biệt nhỏ bằng module Platform.

Ví dụ cấu hình chỉ có ios và native sẽ chọn ios trên iOS, native trên Android. Nếu bỏ native và không có android, Android sẽ nhận default nếu bạn cung cấp. Đừng đọc default như một object nền luôn được áp dụng trước mọi nhánh.

Giữ phần dùng chung bên ngoài select

Thử component này trong ứng dụng React Native đã thiết lập sẵn. Nó chỉ cần core components, không thêm package hoặc quyền hệ thống:

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

const platformCard = Platform.select({
  ios: {backgroundColor: '#e8f0ff'},
  android: {backgroundColor: '#e7f5ed'},
  native: {backgroundColor: '#f4ebff'},
  default: {backgroundColor: '#eeeeee'},
});

const message = Platform.select({
  ios: 'Nhánh iOS',
  native: 'Nhánh native',
  default: 'Nhánh default',
});

export default function PlatformCardDemo() {
  return (
    <View style={styles.screen}>
      <View style={[styles.card, platformCard]}>
        <Text style={styles.title}>{message}</Text>
        <Text>Nền tảng hiện tại: {Platform.OS}</Text>
      </View>
    </View>
  );
}

const styles = StyleSheet.create({
  screen: {flex: 1, justifyContent: 'center', padding: 24},
  card: {padding: 20, borderRadius: 12},
  title: {fontSize: 20, marginBottom: 8},
});

Padding và borderRadius luôn thuộc styles.card. Màu nền đến từ đúng một nhánh platformCard, rồi được áp dụng qua style array. Trên iOS, dòng tiêu đề dự định là “Nhánh iOS”; trên Android, vì message không có khóa android, tiêu đề dự định là “Nhánh native”. Hai lời gọi select có cấu hình riêng nên không nhất thiết cùng chọn một tên nhánh.

Chọn giá trị không phải trộn object

Giả sử bạn đưa {padding: 20} vào native, chỉ đưa {backgroundColor: ...} vào ios rồi dùng duy nhất kết quả select làm style. Khi nhánh ios được chọn, kết quả chỉ là object màu nền đó. Muốn có cả padding, giữ nó trong style chung như ví dụ hoặc tự xây dựng object đầy đủ cho nhánh.

Đây là quyết định tổ chức code, không phải một hứa hẹn rằng mọi style đều nên khác nhau theo OS. Trong màn hình thực tế, hãy bắt đầu từ bố cục chung; chỉ tách phần mà yêu cầu sản phẩm hoặc hành vi nền tảng thực sự cần khác biệt. Đổi màu ở bài này chỉ là tín hiệu giúp quan sát nhánh được chọn.

Có khóa nhưng giá trị undefined là trường hợp khác

Mã nguồn Platform iOS v0.88.0 và Platform Android v0.88.0 kiểm tra sự có mặt của khóa khi chọn nhánh. Vì vậy, một khóa ios được khai báo với giá trị undefined không tương đương việc bỏ hẳn khóa ấy để rơi xuống native.

Trong cấu hình do ứng dụng sinh động, tránh vô tình thêm khóa với undefined rồi mong có fallback. Hãy kiểm tra object đầu vào và nêu rõ nhánh nào thật sự được cung cấp. Bài chỉ đối chiếu implementation của tag đã nêu, không kiểm thử module trên runtime native.

Kiểm tra và giữ phạm vi gọn

Chạy màn hình trên cả iOS lẫn Android, kiểm tra dòng Platform.OS, dòng message và màu nền độc lập. Sau đó bỏ khóa android khỏi platformCard để kiểm tra fallback native; bỏ tiếp native để kiểm tra default. Giữ padding chung nguyên trạng trong mỗi ca để phát hiện việc vô tình chuyển nó vào nhánh.

Nếu khác biệt trở thành cả một component lớn, tài liệu còn hướng dẫn tách file .ios.js và .android.js. Với ví dụ nhỏ này, select đủ để thể hiện lựa chọn. Kết quả cần nhớ là một giá trị được chọn theo thứ tự, còn việc kết hợp cấu hình chung do code của bạn quyết định.

Nguồn tham khảo

  • React Native 0.88: Platform
  • React Native 0.88: Platform-specific code
  • React Native v0.88.0: Platform iOS
  • React Native v0.88.0: Platform Android

Tags: Cross-platform UIPlatformReact Native
SummarizeShare234
Suong Nguyen

Suong Nguyen

Related Stories

Minh hoạ FlatList hiển thị danh sách bài viết trong React Native

React Native FlatList hai cột: numColumns không tạo layout masonry

by Suong Nguyen
07/11/2026
0

Dựng lưới hai cột có card cùng chiều cao, kiểm tra hàng cuối lẻ và giữ chiều rộng card mà không thêm dữ liệu giả.

Minh hoạ style và layout trong React Native với màn hình mobile, spacing và typography

React Native ActivityIndicator: dừng spinner có cần bỏ cả vùng giữ chỗ?

by Suong Nguyen
06/11/2026
0

Tách trạng thái animating khỏi quyết định render một vùng spinner để giữ hoặc thu gọn khoảng trống theo yêu cầu giao diện.

Minh hoạ style và layout trong React Native với màn hình mobile, spacing và typography

React Native pointerEvents: lớp phủ box-none vẫn cho nút con nhận chạm

by Suong Nguyen
05/11/2026
0

Phân biệt auto, none, box-none và box-only trên một lớp phủ có nút con, với bộ đếm để tự kiểm tra vùng nhận chạm.

Minh hoạ style và layout trong React Native với màn hình mobile, spacing và typography

React Native ScrollView: tạo nút về đầu bằng ref và scrollTo

by Suong Nguyen
04/11/2026
0

Gắn ref trực tiếp vào ScrollView và gọi scrollTo bằng object options từ nút bên ngoài vùng cuộn, với bố cục có chiều cao hữu hạn.

0 0 votes
Article Rating
Subscribe
Login
Notify of
guest
guest
0 Comments
Oldest
Newest Most Voted
AE Dev

AE Dev mang đến các bài viết về lập trình, mobile app, backend, frontend, WordPress và công nghệ, phù hợp cho developer muốn học hỏi và cập nhật kiến thức thực tế.

Recent Posts

  • React Native Platform.select: native và default được chọn theo thứ tự nào?
  • Phỏng vấn JavaScript: vì sao regex.test cùng chuỗi lại đổi kết quả?
  • Android TextView.setText(Int): số đếm có thể bị hiểu thành resource ID

Categories

  • AI
  • Backend
  • Đánh giá
  • DevOps
  • Flutter
  • Hướng dẫn
  • Lập trình Mobile
  • Phỏng vấn
  • React Native
  • Uncategorized

Weekly Newsletter

  • Buy JNews
  • Support Forum
  • Pre-sale Question
  • Contact Us

© 2026 AE Dev - Blog công nghệ, lập trình và chia sẻ kiến thức IT.

Welcome Back!

Login to your account below

Forgotten Password?

Retrieve your password

Please enter your username or email address to reset your password.

Log In
No Result
View All Result
  • Trang chủ
  • AI
  • Mobile
  • React Native
  • Backend
  • DevOps
  • Hướng dẫn
  • Flutter

© 2026 AE Dev - Blog công nghệ, lập trình và chia sẻ kiến thức IT.

wpDiscuz
0
0
Would love your thoughts, please comment.x
()
x
| Reply