Bereaksi Asli untuk anak kecil. Pengalaman Pengembangan Seluler

Suatu ketika, dalam satu tim produk, mereka ingin mengembangkan aplikasi mobile untuk menguji hipotesis permintaan produk dan kenyamanannya bagi pengguna. Dan fakta bahwa tim tidak memiliki pengembang seluler tidak ada salahnya. Dua pengembang front-end mengambil React Native dan menulis aplikasi dalam tiga bulan. Pengujian hipotesis berhasil, aplikasi terus berkembang dan membangkitkan minat tim lain di perusahaan.


Gambar dari deskripsi alat: www.semrush.com/news/position-tracking-on-the-go .

Ini adalah deskripsi singkat tentang sejarah tim Artyom Lashevsky, yang selama tiga bulan dari pengembang front-end telah menjadi ponsel. Untuk detail lebih lanjut tentang bagaimana ini terjadi, baca decoding laporan Artyom di FrontendConf 2019: apa yang Bereaksi Asli, mengapa, instruksi langkah demi langkah untuk membuat aplikasi dan memilih perpustakaan dan komponen yang tepat.

Artyom Lashevsky adalah pengembang front-end terkemuka di SEMrush dan spesialis di bidang keamanan informasi sistem otomatis.


Mengapa kita membutuhkan aplikasi


SEMrush adalah perusahaan IT internasional yang mengembangkan platform online besar untuk pemasar. Termasuk dalam platform TOP 3 untuk pemasaran dan SEO. Perusahaan ini memiliki 5 juta pengguna, 7 kantor di dua benua, 800 karyawan dan 30 tim pengembangan.

Setiap tim pengembangan berurusan dengan alatnya sendiri di dalam platform. Saya bekerja di salah satu tim yang terdiri dari 8 orang ini: dua di frontend, tiga di backend, QA, insinyur DevOps dan PO. Alat yang sedang dikerjakan tim kami memungkinkan pengguna untuk memeriksa posisi halaman situs mereka untuk pencarian Google tertentu. Alat ini membantu memeriksa posisi pada kata kunci tidak hanya situs Anda, tetapi juga pesaing dan untuk menganalisis dan membandingkan.

Platform bekerja di browser. Meluncurkan aplikasi seluler akan memungkinkan Anda untuk mendapatkannyakeunggulan kompetitif , karena aplikasi membantu mempertahankan pengguna lama lebih lama dan meningkatkan konversi dari gratis ke berbayar.

Untuk pengguna, aplikasi ini meningkatkan kegunaan platform. Melalui telepon, klien dapat menggunakan SEMrush di mana sebelumnya dibutuhkan komputer. Pergilah ke aplikasi, lihat apakah situsnya telah jatuh di SERP Google atau telah naik - metrik kunci selalu tersedia . Jika dicelupkan, maka dalam versi web Anda dapat melihat detailnya dan memahami cara memperbaiki situasi.

Tim kami melihat potensi aplikasi seluler dan memutuskan untuk mencoba mengembangkannya, tetapi tidak ada pengembang seluler di antara kami. Kami mulai mempelajari alat dan teknologi untuk pengembangan aplikasi sendiri.

Aplikasi asli- hal pertama yang Anda perhatikan. Setelah belajar, kami menyadari bahwa bagi kami itu panjang, mahal, dan tidak nyaman: Anda perlu mempelajari dua tumpukan teknologi, menggandakan fungsi, dan mengujinya dua kali.



Kami pindah dari pengembangan asli ke studi WebView (Apache Cordova). Seorang kolega frontend memiliki pengalaman dalam mengembangkan Cordova, jadi dalam sprint pertama untuk mempelajari teknologi dan solusi, salah satu prototipe dikembangkan di Cordova.



Tetapi kami menginginkan sesuatu yang lebih modern - “pemuda modis”, jadi kami beralih ke solusi lintas platform.

Pengembangan lintas platform. Beberapa opsi dipertimbangkan: Flutter, Xamarin, Native Script, dan React Native. Bagi kami, setiap opsi memiliki minusnya sendiri, karena kami ingin memulai sesegera mungkin:

  • Flutter membutuhkan pengetahuan tentang Dart (alternatif untuk JavaScript). Tidak ada waktu untuk mempelajari teknologi terkait - saya ingin cepat "terbang" untuk menguji hipotesis.
  • Xamarin membutuhkan pengetahuan tentang C #. Kami memiliki pengembang backend, tetapi iOS dan Android membutuhkan antarmuka yang berbeda. Bagaimanapun, Anda harus menduplikasi kode dan implementasi.
  • Naskah Asli dirancang untuk dibundel dengan Angular. Proyek kami menggunakan ReactJS dan Redux, jadi tidak.
  • React Native tampak keren, dan mereka memilihnya. Selain itu, kami hanya ingin mencobanya, terlepas dari kekurangan dan kelebihan dari solusi lain.

Selama pemilihan, kami tidak menemukan Ionic. Mungkin mereka akan mempertimbangkannya juga, tetapi mereka tetap akan memilih React Native.

Bereaksi asli


Ini adalah kerangka kerja Facebook untuk mengembangkan aplikasi asli lintas platform. Dibangun atas dasar ReactJS, di bawah kap tidak menggunakan WebView, jadi tidak ada DOM API. React Native tidak memiliki HTML dan CSS, tetapi ada beberapa komponen platform di JSX dan polyfiles seperti CSS.

Bereaksi Asli mengandung beberapa API JavaScript atas komponen asli. Ini berarti bahwa komponen asli memiliki semacam "mengikat" ke komponen JavaScript di ReactJS. Hubungan antara bundel asli dan JavaScript dilakukan melalui jembatan menggunakan JavaScript API. Secara dangkal, ini semua arsitektur.



Bereaksi Pro Asli:

  • Lintas-platform . Kami ingin menulis aplikasi pada awalnya di bawah iOS, tetapi peluncuran tambahan di bawah Android adalah nilai tambah yang besar.
  • . , . React Native , 80% .
  • . Telegram React Native 3000 . , , , .
  • . — , . , ReactJS React Native.


Dengan React Native, ada dua cara untuk mengembangkan aplikasi: gunakan Expo atau React Native CLI.

Expo Ini adalah lapisan abstraksi - seperangkat alat, perpustakaan dan layanan untuk peluncuran cepat. Ini adalah beberapa API yang di luar kotak memberikan akses ke kemampuan perangkat : ke kamera, geolokasi, pesan push.

Expo memiliki aplikasi debugging dan alat pengujian. Algoritma ini sederhana: instal aplikasi Expo Client di telepon, hubungkan ponsel dengan komputer ke jaringan lokal yang sama, buka Expo di telepon, buka aplikasi yang sedang dikembangkan. Semua perubahan dalam kode ditampilkan secara instan. Ini membantu untuk menguji dan berbagi dalam tim.

Lepas landas di Expo cepat dan cepat. Dengan Expo, Xcode dan Android Studio tidak diperlukan. Kami menulis di lingkungan pengembangan kami, mengumpulkan aplikasi menggunakan layanan Expo, menandatangani dan memperbarui dengan cepat.

Namun ada juga kekurangannya.

  • Anda tidak dapat menambahkan modul asli khusus.
  • Expo adalah lapisan abstraksi atas React Native. Anda tidak dapat meningkatkan ke versi baru kerangka kerja hingga Expo diperbarui.

Bereaksi CLI Asli . Keuntungannya adalah kemungkinan penyesuaian , menambahkan modul asli.

Tetapi untuk menandatangani dan membangun aplikasi (dan menerbitkan) Anda memerlukan Xcode atau Android Studio. Untuk menguji aplikasi, Anda perlu membuat dan mengunduhnya ke ponsel Anda, misalnya, menggunakan TestFlight untuk iOS atau instalasi langsung dari PC ke ponsel. Skema standar, tetapi tidak nyaman dan panjang.



Secara umum, pilihannya sederhana: kami ingin mengembangkan prototipe - kami memilih Expo, kami ingin aplikasi dengan prospek - Bereaksi Asli CLI.
Kami memilih React Native CLI. Di SEMrush, kita mungkin ingin menulis bagian asli kustom kami, jadi poin dengan modul asli dan perpustakaan pihak ketiga dengan modul menjadi faktor penentu. Dengan React Native CLI, permulaannya lebih lambat karena banyak pelatihan, tetapi di masa depan akan ada lebih banyak peluang.

Banyak rekan, menggunakan React Native, dihadapkan dengan kebutuhan untuk kustomisasi, dan mereka memiliki tim khusus untuk melakukan Eject dengan Expo on React Native CLI. Struktur direktori file aplikasi sederhana ditransfer dari set file JavaScript yang biasa ke folder untuk Android, iOS dan JavaScript. Tetapi dengan aplikasi yang kompleks akan ada kesulitan.

Kami sedang menulis aplikasi


Tidak biasa Bereaksi CSS, DOM dan web asli elemen: div, span, li, button. Tetapi ada dua jenis komponen platform di React Native.

  • Cross Platform : View, Text, Imagedan lain-lain.
  • Khusus untuk setiap platform , misalnya, DatePickerIOSatau DatePickerAndroid.

Transisi dari Bereaksi ke Bereaksi asli adalah sederhana: itu blok divitu View, itu blok spanitu Text, dan daftar itu liatau ul- FlatList. Untuk setiap elemen ada korespondensi.

Catatan. Untuk mentransfer komponen web yang sudah jadi ke non-web, Anda dapat menulis transporter, tetapi biasanya lebih mudah untuk menulis ulang lagi.

Anda dapat mulai menulis React Native dengan cepat.

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

export default class App extends Component {
    render() {
        return (
            <View style={styles.container}>
                <Image style={styles.image} source={require('./img/main.png')}/>
                <Text style={styles.welcome}>Hello, SEMrush!</Text>
            </View>
        );
    }
}

Ada beberapa kelas App(wadah aplikasi). Ini berisi metode renderdi mana bagian visual diambil. Ini berisi wadah Viewdi mana pergi Imagedan Text.

Setiap elemen, misalnya, Viewberisi atribut styleyang nilainya ditentukan melalui objek styles.

Objek stylesdibuat menggunakan modul StyleSheetmetode createBereaksi Asli. Objek ini adalah notasi objek CSS, model CSS sederhana yang cukup. Flexbox juga digunakan untuk tata letak antarmuka, juga disederhanakan, tetapi cukup untuk menyelaraskannya secara horizontal dan vertikal.

const styles = StyleSheet.create({
    container: {
        flex: 1,
        justifyContent: 'center',
        alignItems: 'center',
        backgroundColor: '#F5FCFF',
    },
    welcome: {
        fontSize: 20,
        textAlign: 'center',
        margin: 10,
    },
    image: {
        marginBottom: 20,
    },
});

Selesai - kami menulis aplikasi untuk iOS. Ke depan, saya akan mengklarifikasi bahwa ini juga berfungsi untuk Android.


Aplikasi pertama adalah "Halo, Dunia!".

Lintas-platform


Kami ingin aplikasi kami berfungsi di Android dan iOS. Pada saat yang sama, kami ingin dapat melakukan berbagai implementasi tergantung pada platform. Ada dua cara untuk melakukan ini di Bereaksi Asli.

Cara pertama adalah menggunakan modul Platform . Misalnya, kami membuat aplikasi dan mengatur ketinggian tergantung pada platform. Untuk iOS, tingginya 200, untuk Android, 100. Menggunakan metode ini, kami Platform.OSmenentukan platform mana yang digunakan pengguna.

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

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

Jika kita memiliki 40 atribut seperti itu, tidak perlu menggandakan kode. Ada metode Platform.selectdari modul yang sama untuk ini. Ini mengembalikan satu set properti dengan kunci platform: di bawah iOS kembali backgroundColor = 'red', di bawah Android - backgroundColor = 'blue'. Sebagai hasilnya, kami dapat mengembalikan set atribut kami untuk iOS (setidaknya ada 20, setidaknya 40 di antaranya), untuk Android - set yang sama sekali berbeda.

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

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

Metode ini Platform.selectmemungkinkan Anda untuk menulis komponen lintas platform.

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

<Component />;

Beberapa komponen menggunakan metode Platform.selectyang, tergantung pada kunci platform, mengembalikan implementasinya. Semuanya baik-baik saja, kami mengambil dan menulis perpustakaan lintas platform.

Jika ada solusi khusus atau batasan pada sistem operasi, kami dapat menentukan versi OS.

import {Platform} from 'react-native';

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

import {Platform} from 'react-native';

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

Metode kedua - gunakan ekstensi file platform-spesifik ( *.android.jsdan *.ios.js). Ini memungkinkan Anda untuk mengembangkan implementasi lintas platform untuk kode yang lebih besar dan logika yang kompleks. Lalu kami membagi semua kode menjadi dua file, misalnya, BigButton.ios.jsdan BigButton.android.js. Dalam kode tempat kami ingin menggunakannya, kami menggunakan antarmuka dan mengimpornya BigButton. React Native akan mengurus impor yang diperlukan tergantung pada platform.

Komponen


Kami dapat menerapkan solusi lintas platform, tetapi kecepatan itu penting. Oleh karena itu, kami bergerak menuju solusi yang sudah jadi - perpustakaan komponen. Meneliti, menyoroti banyak solusi hebat (UI kit) dan memilih NativeBase . Ini adalah perpustakaan besar dengan selusin komponen, 12.000 bintang di GitHub, yang memungkinkan Anda untuk menyelesaikan sebagian besar masalah.

   
Contoh UI untuk iOS di sebelah kiri, untuk Android di sebelah kanan.

Dalam proyek kami, kami sebagian menggunakan perpustakaan ini, menyesuaikan elemen dan mengatur gaya kami sendiri. Misalnya, kami memiliki Buttonatau komponen Headeryang kami impor dari perpustakaan NativeBase.



Kami menulis kode sekali, sementara pada setiap platform terlihat berbeda.

import React, { Component } from 'react';
import { Container, Header, Content, Button, Text } from 'native-base';
export default class ButtonThemeExample extends Component {
    render() {
        return (
            <Container>
                <Header />
                <Content>
                    <Button light><Text> Light </Text></Button>
                    <Button primary><Text> Primary </Text></Button>
                    <Button success><Text> Success </Text></Button>
                    <Button info><Text> Info </Text></Button>
                    <Button warning><Text> Warning </Text></Button>
                    <Button danger><Text> Danger </Text></Button>
                    <Button dark><Text> Dark </Text></Button>
                </Content>
            </Container>
        );
    }
}

Navigasi


Untuk navigasi, kami juga membandingkan beberapa solusi yang mungkin.

  • react-navigation Facebook React Native.
  • wix/react-native-navigation — Wix. , , -, — .
  • react-router — react-router ReactJS . , .
  • airbnb/native-navigation — - Airbnb. , .

Kami memilih solusi pertama - reaksi navigasi . Ini sepenuhnya JavaScript, jadi kami tidak perlu khawatir tentang file asli. Tetapi di sisi lain, kinerja dipertanyakan.

Kami berdiskusi dengan kolega-kolega dari komunitas React Native, mempelajari artikel-artikel, dan menyadari bahwa kinerja navigasi reaksi dan navigasi wix / reaksi-asli hampir sama. Oleh karena itu, mereka memilih solusi pertama, dan pengalaman penggunaan hanya mengkonfirmasi kebenaran pilihan.

   

Kelebihan dari navigasi reaksi:

  • Solusi lintas platform yang fleksibel.
  • UI asli untuk setiap platform dan transisi asli antara layar. Kami tidak ingin membuat aplikasi yang pada Android terlihat seperti di iOS.
  • Ini menyediakan semua jenis dasar transisi: tab bawah, geser antar layar, jendela modal SwitchNavigator.

Contoh struktur aplikasi menggunakan navigasi reaksi. Kode ini lebih nyaman dibaca dari bawah ke atas.

const HomeStack = createStackNavigator({
    Home: { screen: HomeScreen },
    Details: {screen: DetailsScreen },
});

const SettingsStack = createStackNavigator({
    Settings: { screen: SettingsScreen },
    Details: { screen: DetailsScreen },
});

const TabNavigator = createBottomTabNavigator({
    Home: { screen: HomeStack },
    Settings: { screen: SettingsStack },
});

export default createAppContainer(TabNavigator);

Beberapa createAppContainerberisi createBottomTabNavigatordua tumpukan. Setiap tumpukan memiliki set layarnya sendiri.


Kami memiliki dua tombol - Homedan Settings. Ini adalah dua tumpukan - HomeStackdan SettingsStack. Di dalam setiap tumpukan ada dua layar: HomeScreendan DetailsScreen, SettingsScreendan, DetailsScreenmasing-masing. Kedua tumpukan menggunakan komponen yang sama DetailsScreen. Kami menulis komponen (layar) dan menggunakannya kembali di tumpukan yang berbeda.

Kode untuk tiga layar terlihat sesederhana mungkin.

class HomeScreen extends React.Component {
    static navigationOptions = { title: 'Home' };

    render() {
        return (
            <View style={styles.container}>
                <Text>Home!</Text>
                <Button title="Go to Details" onPress={() => this.props.navigate('Details')}/>
            </View>
        );
    }
}

class SettingsScreen extends React.Component {
    static navigationOptions = { title: 'Settings' };

    render() {
        return (
            <View style={styles.container}>
                <Text>Settings!</Text>
                <Button title="Go to Details" onPress={() => this.props.navigate('Details')}/>
            </View>
        );
    }
}

class DetailsScreen extends React.Component {
    static navigationOptions = { title: 'Details' };

    render() {
        return (
            <View style={styles.container}>
                <Text>Details!</Text>
                <Button title="Go to Details" onPress={() => this.props.navigate('Details')}/>
            </View>
        );
    }
}

Ini adalah sama "Halo, Dunia!" Yang kita mulai dengan - tidak lebih.

Tambahkan Redux . Kami membungkus navigator root Provider, menggulungnya store. Berikutnya, menulis reducer, actions, actionTypesdan sisanya - semuanya familiar.

const Navigation = createAppContainer(TabNavigator);

//Render the app container component with the provider around it
export default class App extends React.Component {
    render() {
        return (
            <Provider store={store}>
                <Navigation />
            </Provider>
        );
    }
}

Perlu lebih banyak komponen


Memilih kit UI akhir, kami mempertimbangkan banyak solusi yang mungkin: Bereaksi Elemen Asli, UI Kitten, React Native Material Kit, React Native Material Kit, React Native UI Library, React Native Paper, Shoutem UI Toolkit, Nachos UI, Teaset. Akibatnya, kami menggunakan beberapa komponen perpustakaan ini.



React Native juga memiliki komponen yang berorientasi pada platform. Contoh yang mencolok adalah DatePickerAndroiddan DatePickerIOS. Mereka berbeda secara visual dan antarmuka, jadi Anda harus menduplikasi kode untuk menyelesaikan satu masalah untuk kedua platform.

  
Di sebelah kiri adalah DatePickerAndroid, di sebelah kanan adalah DatePickerIOS.

Misalnya, dalam aplikasi kami, Anda dapat meminta laporan atau grafik untuk jangka waktu tertentu. Pengguna menyediakan dua tanggal untuk memilih periode. Tetapi di iOS, pengambilan tanggal asli tidak nyaman, terutama dibandingkan dengan versi web alat kami.



Kami harus melakukan dua bidang: untuk tanggal mulai dan berakhir. Lebih mudah untuk memilih tanggal dalam satu bidang seperti pada Android, tetapi kami tidak akan dapat mengatur semuanya juga - kustomisasi minimal .

Kami menemukan solusi - wix / react-native-calendars .
     
Di sebelah kanan adalah contoh kalender dari aplikasi kami dengan warna perusahaan.

Ini memiliki kalender horizontal dan vertikal, merinci berdasarkan tanggal, kemampuan untuk menampilkan gaya perusahaan, memilih rentang tanggal, memblokir pemilihan tanggal tertentu dan mendukung Android dan iOS. Sangat nyaman bahwa solusi memiliki satu antarmuka - kami menulis kode satu kali - kami menulis kode sekali, tanpa duplikasi dan penulisan ulang.

Penyimpanan


Pada titik tertentu, kami perlu menyimpan data untuk menampilkannya secara offline atau ketika melanjutkan pekerjaan. Untuk melakukan ini, gunakan perpustakaan Penyimpanan Async (penyimpanan nilai kunci). Ini bekerja dengan kunci dan multi-tombol (menulis, membaca dan menghapus), dan menyediakan API JavaScript untuk berinteraksi dengan bagian asli.

Data IOS disimpan dalam bentuk serial. Di bawah Android - misalnya, dalam SQLite. Sebagai pengembang, kita tidak perlu khawatir tentang ini: ada API, kami menyimpan data, semuanya baik-baik saja.

Animasi


React Native tidak menggunakan teknologi WebView berbasis HTML, jadi kami tidak punya animasi. Di sini komponen Animasi membantu kita . Mendukung beberapa bungkus elemen dasar: View, Image, Text, ScrollView. Ini berjalan di utas terpisah dan tidak memperlambat aplikasi, tetapi ada minus - jenis "tidak manusiawi" kode.

Di bawah ini adalah contoh layar aplikasi kami dengan daftar proyek pengguna.


Di atas Headerdengan nama "Proyek", yaitu SearchBarmenyaring proyek. Sepertinya ada SearchBardi bawah Header, tetapi pada kenyataannya itu ada di aliran umum blok yang masuk di bawah ini dengan daftar proyek. Berkat komponen Animated, animasi tersebut diimplementasikan sehingga SearchBar“menghilang”.

Versi singkat dari implementasi.

export default class ProjectsScreen extends Component {

    state = {
        scrollY: new Animated.Value(
            Platform.OS === 'ios' ? -HEADER_MAX_HEIGHT : 0,
        ),
    };

    render() {
        const scrollY = Animated.add(
            this.state.scrollY,
            Platform.OS === 'ios' & HEADER_MAX_HEIGHT : 0,
        );
        const headerTranslate = scrollY.interpolate({
            inputRange: [0, HEADER_SCROLL_DISTANCE],
            outputRange: [0, -HEADER_SCROLL_DISTANCE],
            extrapolate: 'clamp',
        });

        return (
            <View>
                <Animated.View style={{ translform: [{ translatY: headerTranslate }] }}>
                    <SearchBar/>
                </Animated.View>
                <Animated.ScrollView
                    onScroll={Animated.event(
                        [{ nativeEvent: { contentOffset: { y: this.state.scrollY } } }],
                        { useNativeDriver: true },
                    )} contentInset={{
                        top: HEADER_MAX_HEIGHT,
                    }}
                    contentOffset={{
                        y: -HEADER_MAX_HEIGHT,
                    }}
                >
                    {this._renderScrollViewContent()}
                </Animated.ScrollView>
            </View>
        );
    }
}    

Ini terlihat mudah, tetapi Anda harus "menyandarkan": memindahkan semua konten lebih tinggi atau lebih rendah di iOS. Di Android, ini tidak perlu. Ada juga interpolasi dan metode yang berbeda dari modul Animated.

Masalah "berkedip" layar pada awal pertama


Kami menulis aplikasi dan memutuskan untuk menambahkan ikon aplikasi dan Splash Screen (atau Launch Screen) - layar aplikasi yang muncul ketika Anda pertama kali memulainya jika diturunkan dari memori. Kami memiliki layar berwarna oranye dan dengan logo SEMrush di tengah.



Dalam arsitektur Asli Bereaksi, bagian asli berinteraksi dengan beberapa bundel jembatan JavaScript. Kami mengalami masalah bahwa pada saat peluncuran, bagian asli berfungsi, dan bundel skrip belum dimuat. Antara Layar Splash oranye dan tampilan daftar proyek, kekosongan putih (sepersekian milidetik) bersinar di layar.

Masalah flicker diselesaikan dengan menggunakan perpustakaan reaksi-asli-splash-layar. Ini menyediakan JavaScript API untuk secara terprogram menampilkan atau menyembunyikan layar peluncuran aplikasi. Melalui API ini, kami menghapus Layar Splash asli di komponen dengan daftar proyek dalam metode ini componentDidMount(). Mereka menempatkan pemintal di antara dua layar sebagai bonus untuk membuat mereka terlihat lebih cantik.

Kehilangan koneksi


Kami ingin mengembangkan antarmuka yang ramah dan indah, merawat UX dan UI. Tetapi ketika pengguna mengendarai kereta bawah tanah, kehilangan kontak dan memperbarui daftar proyek, aplikasi hanya menampilkan layar kosong. Lebih baik bagi pengguna untuk melihat informasi yang telah dimuat, dan pesan tentang masalah dengan koneksi Internet.

Perpustakaan Netinfo membantu pekerjaan offline . Sekarang dalam paket terpisah, karena Facebook membongkar React Native untuk membuatnya lebih ringan.



Netinfo memungkinkan Anda untuk:

  • Berlangganan acara dan, saat mengubah koneksi Internet, tampilkan pesan kepada pengguna;
  • periksa kualitas koneksi;
  • Periksa jenis koneksi (LTE, WiFi, 3G) untuk aplikasi yang kompleks;
  • Gunakan permintaan untuk memeriksa koneksi internet Anda.

Aplikasi debugging


Agar tidak mendapatkan kesalahan setelah menambahkan dependensi baru, terutama yang menggunakan kode asli, Anda memerlukan debugger. Dalam Bereaksi Asli itu - ditampilkan dalam gambar simulator iPhone.


Untuk iOS, kami menggunakan emulator dari Xcode, di mana Anda dapat memilih versi OS dan perangkat. Simulator untuk Android - Android Studio.

Menu dialog emulator memiliki mode Debug JS Remotely dan Live Reload. Memungkinkan Anda melihat properti komponen, misalnya, gaya mirip-CSS dan tampilan bersarang.

Dalam pengembangan asli, Anda perlu menulis kode, mengirimkannya ke majelis, menjalankan - ini adalah waktu yang lama. Dalam debugger, semuanya sama seperti di ReactJS di web: kami mengaktifkan Live Reloading dan melihat pembangunan kembali real-time dalam simulator tanpa me-reboot.

Selain itu, kami juga menggunakan Alat Bereaksi Pengembang untuk memeriksa komponen, melihat hierarki, dan mengubah properti dan gaya mereka.



Tetapi meskipun ini tidak cukup, ada solusi yang lebih baik - Bereaksi Debugger Asli .



Ini memiliki React Inspector, Redux DevTools, interaksi Internet, pencatatan konsol, memori dan pembuatan profil aplikasi, melihat semua tindakan. Berbeda dengan dua dua solusi pertama, Anda dapat mengubah gaya di React Native Debugger itu sendiri.

Menghubungkan modul asli


Sampai sekarang, semuanya mudah dan transparan: kami mengambil beberapa solusi, terhubung, berfungsi. Tetapi ada nuansa - konsekuensi dari arsitektur React Native. Selain bagian JavaScript, semua perpustakaan menggunakan yang asli, yang harus dikaitkan dengan Bereaksi Asli. Untuk melakukan ini, ada perintah tautan reaksi-asli yang secara otomatis membuat semua perubahan dan tautan yang diperlukan ke kode asli dalam proyek.

Tetapi koneksi otomatis tidak selalu berfungsi, jadi terkadang Anda harus memodifikasi file asli secara manual. Jika instalasi manual tidak dijelaskan dalam instruksi untuk perpustakaan, maka pikirkan apakah layak menggunakannya, dan jika mungkin hindari menghubungkan secara manual - beberapa kali kami menginjak menyapu seperti itu.

Hasil


Awalnya, kami ingin menulis aplikasi untuk iOS, tetapi kami melakukannya untuk Android, dan mereka terlihat berbeda, seperti semua orang di platform mereka. Transisi antar layar terlihat keren, dan kami memiliki sekitar 30 layar (transisi dan status). Kami berhasil menghindari penerapan modul bawaan khusus dan menggunakan solusi pihak ketiga.

Pengaturan waktu: pengembangan aplikasi membutuhkan waktu tiga bulan dari dua orang. Sejak April 2019, mereka telah merilis beberapa pembaruan dengan fungsionalitas baru, aplikasi ini berkembang, dan tim proyek lain ingin mengimplementasikan alat mereka di dalamnya.

Kinerja React Native benar-benar memuaskan bagi kami, karena kami tidak membutuhkan logika yang kompleks dan kami tidak memiliki beban yang besar.

Umpan balik:Senang menerima umpan balik pengguna untuk aplikasi.

React Native cocok untuk mengembangkan aplikasi seluler dan menguji hipotesis dengan cepat , bahkan jika Anda bukan pengembang seluler. Ini terus berkembang, fungsi dan perpustakaan baru muncul. Misalnya, setahun yang lalu tidak ada dukungan untuk arsitektur 32 dan 64-bit - sekarang tidak ada masalah dengan ini.

, , -, . , , « », . ++ 2020 — .

, , , , , — - , 5900.

All Articles