Skip to content

Latest commit

 

History

History
123 lines (85 loc) · 6.16 KB

platform-specific-code.md

File metadata and controls

123 lines (85 loc) · 6.16 KB
id title
platform-specific-code
Тухайн платформд зориулсан код

Платформ дамжин ажиллаж чадах апп хийх үед та бичсэн кодоо аль болох дахин ашиглахыг хүсэх нь лавтай. Гэхдээ кодыг заавал өөрөөр хийх шаардлагатай нөхцөл байдал мөн үүсэх магадлалтай . Тухайлбал та харагдах байдлын компонентыг iOS болон Android-д тус тусад нь хийхийг хүсэж болно.

React Native нь кодоо хялбар зохицуулж, платформд зориулан тусгаарлах хоёр арга санал болгодог.

Зарим нэг компонентууд нь зөвхөн тухайн нэг платформ дээр ажиллах хэсэгтэй байж болно. Эдгээр бүх проп нь @platform гэсэн тэмдэглэгээтэй байх ба вэбсайт дээр хажуудаа жижиг ялгах тэмдэгтэй байдаг.

Платформ модуль

React Native-т тухайн апп ажиллаж байгаа платформыг таних модуль байдаг. Энэхүү таних функцийг ашиглан тухайн платформд зориулсан код ажиллуулах боломжтой. Компонентийн багахан хэсэг нь ямар нэг платформд зориулсан байх шаардлагатай бол энэ аргыг ашиглаарай.

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

const styles = StyleSheet.create({
  height: Platform.OS === 'ios' ? 200 : 100,
});

Platform.OS will be ios when running on iOS and android when running on Android.

Мөн Platform.select арга бий. Platform.OS-ыг түлхүүр хэлбэрээр агуулсан объект байгаа үед одоо ашиглаж байгаа платформ дээрээс утгыг авдаг.

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

const styles = StyleSheet.create({
  container: {
    flex: 1,
    ...Platform.select({
      ios: {
        backgroundColor: 'red',
      },
      android: {
        backgroundColor: 'blue',
      },
    }),
  },
});

Үүний дүнд хоёр платформ дээр flex: 1-тэй контейнер дотор үүснэ. iOS дээр улаан суурь өнгөтэй, Android дээр цэнхэр суурь өнгөтэй байна.

ямар ч утга оруулж болох тул та доорх шиг тодорхой платформд зориулсан компонент буцаахад ашиглаж болно:

const Component = Platform.select({
  ios: () => require('ComponentIOS'),
  android: () => require('ComponentAndroid'),
})();

<Component />;

Android хувилбарыг таних

Android дээр Platform модулийг апп ажиллаж байгаа Android платформын нь хувилбарыг танихад ашиглаж болно:

import {Platform} from 'react-native';

if (Platform.Version === 25) {
  console.log('Running on Nougat!');
}

iOS хувилбарыг таних

iOS дээр Version гэдэг -[UIDevice systemVersion]-ын үр дүн юм. Энэ нь одоогийн үйлдлийн системийн string юм. Энэхүү системийн хувилбарын нэг жишээ бол "10.3". Жишээ нь iOS дээр их хувилбарын дугаарыг танихад:

import {Platform} from 'react-native';

const majorVersionIOS = parseInt(Platform.Version, 10);
if (majorVersionIOS <= 9) {
  console.log('Work around a change in behavior');
}

Тухайн платформд зориулсан өргөтгөл

Тухайн платформд зориулсан код нь их нарийн бол та кодоо тусдаа файлууд болгож хуваах нь зүйтэй. React Native нь файлыг .ios. эсвэл .android. гэж таньдаг бөгөөд бусад компонентуудаас шаардлагатай үед холбогдох платформыг ажиллуулдаг.

Жишээ нь, танд доорх файлууд байлаа гэж бодъё:

BigButton.ios.js
BigButton.android.js

Та доорх маягаар компонентоо дуудаж болно:

import BigButton from './BigButton';

React Native ачаалж байгаа платформ дээр үндэслэн зөв файлыг сонгодог.

Тухайн нативт зориулсан өргөтгөл ( NodeJS болон Web-д код хуваалцах)

Модуль NodeJS/Web болон React Native-ын хооронд хорших хэрэгтэй агаад Android/iOS-т ялгаагүй байх бол та .native.js гэсэн өргөтгөлийг ашиглах боломжтой. React Native болон ReactJS-ын дунд хуваалцах түгээмэл кодтой юм дээр ажиллаж байгаа бол энэ танд илүү хэрэг болно.

Жишээ нь, танд доорх файлууд байлаа гэж бодъё:

Container.js # picked up by Webpack, Rollup or any other Web bundler
Container.native.js # picked up by the React Native bundler for both Android and iOS (Metro)

Та .native өргөтгөлгүйгээр доорх байдлаар дуудаж болно:

import Container from './Container';

Мэргэжлийн зөвлөгөө: Хэрэглэхгүй кодтой байхаас сэргийлж, bundle-ийн сүүлийн хэмжээг багасгахын тулд вэб багцлагч (bundler)-аа тохируулахдаа .native.js өргөтгөлийг хэрэгсэхгүй орхих хэрэгтэй.