Phản ứng css bản địa

Điền email để nhận ASO Checklist

​( + kèm theo bản chiến lược ASO chi tiết)

Phản ứng css bản địa

​NHẬN KIỂM TRA >>

Phản ứng css bản địa

is done

​Cảm ơn bạn đã đăng ký. Kiểm tra hộp thư để nhận liên kết tải xuống sách


Ngoài ra, trên VNTALKING còn chia sẻ rất nhiều từ khóa học, tài liệu bổ sung cho độc giả. Bạn có thể ghé qua xem có tài liệu phù hợp với mình không nhé

​Xem quà tặng khác nhau

Phản ứng css bản địa

is done

​Cảm ơn bạn đã đăng ký. Kiểm tra hộp thư để nhận liên kết tải xuống sách


Ngoài ra, trên VNTALKING còn chia sẻ rất nhiều từ khóa học, tài liệu bổ sung cho độc giả. Bạn có thể ghé qua xem có tài liệu phù hợp với mình không nhé

​Xem quà tặng khác nhau

Phản ứng css bản địa

is done

​Cám ơn ​đã đăng ký. ​Bạn kiểm tra hộp thư để nhận link tải sách


Ngoài ra, ​VNTALKING vừa hoàn thành cuốn sách học lập trình Node. js thật đơn giản (tiếng việt). ​Mình tin bạn sẽ thích nó?

​Reported book

Phản ứng css bản địa

​Đăng ký để nhận sách  miễn phí ​

​Kiểm tra inbox để nhận link tải sách nhé

​Reported book

Xin chào các bạn đã đến với hướng dẫn học React-Native cho người mới bắt đầu. Sau đây là một số chia sẻ, hướng dẫn của mình cho người mới bắt đầu tìm hiểu về React-Native. Qua đó Giúp các bạn có cách nhìn tổng thể hơn và dễ dàng tìm hiểu vấn đề khi mới chập chững bước chân vào lập trình với React-Native

p/s. Bài viết chủ yếu dựa trên tài liệu chính hệ thống của React-Native phiên bản 0. 56 tại https. //Facebook. github. io/react-native/docs/getting-started kết hợp với sự hiểu biết cá nhân của mình vì vậy nếu có sai sót, anh em cứ góp ý để mình sửa đổi nhé

Mục Lục

tôi. Mục tiêu hướng dẫn
II. Một vài lưu ý
III. Nội dung hướng dẫn

  • 1. Hướng dẫn cài đặt môi trường phản ứng gốc trên hệ điều hành Windows
  • 2. Hướng dẫn cài đặt môi trường phản ứng gốc trên hệ điều hành MAC OS
  • 3. Các IDE được khuyến khích sử dụng
  • 4. Khởi tạo dự án đầu tiên
  • 5. Các thành phần cơ bản của dự án
  • 6. Thành phần trong React-Native
    • 6. 1. Vòng đời của component
    • 6. 2. Các thành phần cơ bản của thành phần
    • 6. 3. Một số hàm đặc biệt
    • 6. 4. Một vài lưu ý nhỏ khi sử dụng React-Native
  • 7. Design Design View (Kiểu)
  • 8. Kỹ thuật Gỡ lỗi cơ bản
  • 9. Các Component thường sử dụng
    • 9. 1. Lượt xem
    • 9. 2. Chữ
    • 9. 3. Hình ảnh
    • 9. 4. Cái nút
    • 9. 5. TouchableOpacity
    • 9. 6. danh sách phẳng
  • 10. Prop và cách truyền dữ liệu giữa các View (Screen)
  • 11. Cài đặt và sử dụng thư viện
    • 11. 1. Cài đặt thư viện
    • 11. 2. Liên kết thư viện
    • 11. 3. Edit thư viện
  • 12. Chuyển đổi giữa các màn hình
  • 13. Giao tiếp Client vs Server
    • 13. 1. API RESTful
    • 13. 2. ổ cắm web
  • 14. Lưu trữ dữ liệu
    • 14. 1. Kho
    • 14. 2. cơ sở dữ liệu
  • 15. Đa ngôn ngữ
  • 16. Giao tiếp với bản địa
  • 17. Quy định tên biến và cấu trúc chương trình
    • 17. 1. Biến tên và tên hàm
    • 17. 2. Constructor program
I. Mục tiêu hướng dẫn
  • Hiểu được các thành phần cơ bản của React-Native
  • Nắm giữ vòng đời của một màn hình, thành phần của React-Native
  • Tùy chỉnh các thành phần theo ý muốn
  • Tìm kiếm, sử dụng và tùy biến thư viện
  • Xây dựng 1 ứng dụng đọc báo như báo mới
II. Một vài lưu ý
  • Bài viết nhắm tới những bạn đã có cơ bản về javascript nhất là quen thuộc với ES6. Nếu bạn chưa biết về javascript vui lòng tìm hiểu javascript cơ bản ít nhất bạn cần nắm vững những kiến ​​thức sau (bạn có thể tự tìm hiểu tại https. //freetuts. net/hoc-javascript/javascript-can-ban)

    • Biến và toán tử trong javascript
    • Lệnh Nếu. khác
    • Chuyển lệnh. trường hợp
    • vòng lặp màu trắng
    • Vòng lặp cho
    • Vòng lặp cho. Trong
    • Viết hàm thực thi các nhiệm vụ cơ bản
    • Mảng. (duyệt truy tìm các phần tử)
  • Nếu biết về css thì đó cũng là một điểm lợi thế. Bạn có thể tìm hiểu thêm tại đây https. //freetuts. net/css-la-gi-hoc-css-nhu-the-nao-327. html

  • Hiện tại hệ điều hành Windows chỉ xây dựng được ứng dụng Android

  • Hệ điều hành IOS có thể build được cả Android và IOS

  • Phiên bản IOS thấp nhất mà Reac-native có thể hỗ trợ là iOS 8. 0

  • Phiên bản Android thấp nhất mà react-native có thể hỗ trợ là Android 4. 1 (API 16)

  • Các hướng dẫn dưới đây ngoại trừ phần cài đặt, đều là hướng dẫn để xây dựng ứng dụng trên iOS. Một số chức năng có thể IOS hỗ trợ nhưng Android không hỗ trợ và ngược lại, nếu có lỗi các bạn có thể bình luận tại đây hoặc search google để nâng cao khả năng giải quyết vấn đề nhé

  • Để chạy các mẫu mã, sau khi tải xuống Vui lòng vào thư mục và chạy dòng lệnh

    import React, { Component } from 'react';
    import { Text, View } from 'react-native';
    
    class CustomText extends Component {
        constructor(props) {
            super(props);
        }
    
        render() {
            return (
                <Text>{this.props.message}</Text>   /*Sử dụng props được truyền từ ngoài vào.*/
            );
        }
    }
    
    export default class App extends Component {
        constructor(props) {
            super(props);
            this.state = {
                message: "Welcome to Code 101 - React-native"
            }
        }
    
        render() {
            return (
                <CustomText message={this.state.message} /> /*truyền 1 props vào cho thằng con sử dụng.*/
            );
        }
    }
    3 để tải toàn bộ thư viện cần sử dụng. And run
    import React, { Component } from 'react';
    import { Text, View } from 'react-native';
    
    class CustomText extends Component {
        constructor(props) {
            super(props);
        }
    
        render() {
            return (
                <Text>{this.props.message}</Text>   /*Sử dụng props được truyền từ ngoài vào.*/
            );
        }
    }
    
    export default class App extends Component {
        constructor(props) {
            super(props);
            this.state = {
                message: "Welcome to Code 101 - React-native"
            }
        }
    
        render() {
            return (
                <CustomText message={this.state.message} /> /*truyền 1 props vào cho thằng con sử dụng.*/
            );
        }
    }
    4 to run application on IOS.
    import React, { Component } from 'react';
    import { Text, View } from 'react-native';
    
    class CustomText extends Component {
        constructor(props) {
            super(props);
        }
    
        render() {
            return (
                <Text>{this.props.message}</Text>   /*Sử dụng props được truyền từ ngoài vào.*/
            );
        }
    }
    
    export default class App extends Component {
        constructor(props) {
            super(props);
            this.state = {
                message: "Welcome to Code 101 - React-native"
            }
        }
    
        render() {
            return (
                <CustomText message={this.state.message} /> /*truyền 1 props vào cho thằng con sử dụng.*/
            );
        }
    }
    5 để chạy ứng dụng trên hệ điều hành Android

Khuyến nghị. Sau những lần tìm hiểu và phát triển ứng dụng thì mình khuyến cáo không nên sử dụng Expo (framework of react) để phát triển ứng dụng đơn giản. Bởi vì dự án của bạn sẽ trở nên nghiêm trọng, bạn rất khó quản lý giấy phép và các thư viện đi kèm

III. NỘI DUNG Vệ DẪN

1. Hướng dẫn cài đặt môi trường phản ứng gốc trên hệ điều hành Windows

  • Bước 1. Cài đặt Chocolatey từ https. //sô cô la. org (Chocolatey là trình quản lý các gói thư viện của Windows)

  • Bước 2. Cài đặt Nodejs Java và Python 2 thông qua Chocolatey bằng cách sử dụng dòng lệnh sau (sử dụng cmd để chạy lệnh này).
    ______06

  • Bước 3. Cài đặt Android studio

  • Bước 4. Cài đặt SDK. Nên cài đặt SDK Platform 23 vì mặc định react-native hiện đang sử dụng Android SDK Platform 23 để xây dựng ứng dụng

Lưu ý. Trên hệ điều hành windows chỉ có thể xây dựng ứng dụng trên Android

2. Hướng dẫn cài đặt môi trường phản ứng gốc trên hệ điều hành MAC OS

  • Bước 1. Cài đặt Brew. Brew là trình quản lý các thư viện gói, MACOS không có sẵn và bạn phải sử dụng thiết bị đầu cuối để cài đặt brew bằng cách chạy dòng lệnh sau.
    ______07

  • Bước 2. Cài đặt Nodejs.
    ______08

  • Bước 3. Cài đặt Watchman.
    ______09

  • Bước 4. Cài đặt phản ứng gốc.
    ______70

  • Bước 5. Cài đặt Xcode. truy cập App Store trên MACOS để cài đặt Xcode

  • Bước 6 (tùy chọn). Nếu bạn xây dựng ứng dụng android sử dụng hệ điều hành MACOS thì bạn cần cài đặt thêm các gói như JDK, Android Studio, Android SDK. (xem thêm phần cài đặt cho Windows để hiểu rõ hơn. )

3. Các IDE được khuyến khích sử dụng

  • Mã. Hiện tại mình đang sử dụng Visual Studio Code các bạn có thể tải về và cài đặt tại https. //mã số. Visual Studio. com/
    Các bạn cũng có thể sử dụng bất kỳ IDE nào bạn thích như Sublime Text Atom, Vim Editer.
  • Xây dựng ứng dụng
  • iOS. used Xcode (search trên store apple nhé)
  • Android. sử dụng Android studio https. // nhà phát triển. Android. com/studio/

P/s. Nếu dùng MAC thì nên dùng Xcode để chạy ứng dụng. Bởi vì một số lý do như. Chạy các lần sau nhanh hơn, xem log debug mà không cần bật chức năng Debug JS Remotely và quan trọng là làm quen với một số chức năng của Xcode để khi xảy ra lỗi sửa lỗi nhanh hơn.
Với Android thì có đôi chút trở ngại khi dùng Android studio như việc chạy mà không dùng code react-native mới nhất, chức năng tải lại máy chủ cũng khó hoạt động.

4. Khởi tạo dự án đầu tiên

  • Bước 1. Khởi tạo dự án. mở Terminal (cmd) sau đó nhập lệnh này vào (cd vào thư mục bạn muốn tạo dự án trước)

    this.setState({
    	message: "Chào mừng",
    	key: "Value",
    })
    console.log(this.state.message) //không nên
    // không sử dụng this.state ngay sau khi vừa set xong
    // biến truyền vào cho hàm setState là một đối tượng có dạng key: value.
    1

  • Bước 2. Truy cập vào dự án vừa tạo.
    ______72

  • Bước 3. Chạy ứng dụng trên hệ điều hành.
    IOS.

    import React, { Component } from 'react';
    import { Text, View } from 'react-native';
    
    class CustomText extends Component {
        constructor(props) {
            super(props);
        }
    
        render() {
            return (
                <Text>{this.props.message}</Text>   /*Sử dụng props được truyền từ ngoài vào.*/
            );
        }
    }
    
    export default class App extends Component {
        constructor(props) {
            super(props);
            this.state = {
                message: "Welcome to Code 101 - React-native"
            }
        }
    
        render() {
            return (
                <CustomText message={this.state.message} /> /*truyền 1 props vào cho thằng con sử dụng.*/
            );
        }
    }
    4
    Android.
    import React, { Component } from 'react';
    import { Text, View } from 'react-native';
    
    class CustomText extends Component {
        constructor(props) {
            super(props);
        }
    
        render() {
            return (
                <Text>{this.props.message}</Text>   /*Sử dụng props được truyền từ ngoài vào.*/
            );
        }
    }
    
    export default class App extends Component {
        constructor(props) {
            super(props);
            this.state = {
                message: "Welcome to Code 101 - React-native"
            }
        }
    
        render() {
            return (
                <CustomText message={this.state.message} /> /*truyền 1 props vào cho thằng con sử dụng.*/
            );
        }
    }
    5

Khi chạy lệnh này, hệ điều hành sẽ tạo một máy chủ cục bộ để xây dựng mã phản ứng của bạn. Add to that is run the command to build application.
Bạn cũng có thể mở tệp /ios/ProjectName. xcodeproj bằng Xcode để khởi động ứng dụng, hoặc mở thư mục nguyên android bằng Android studio để khởi động ứng dụng.

  • Hiển thị Menu điều khiển

    • Command + D (hoặc thả điện thoại iOS) để hiển thị menu điều khiển khi chạy gỡ lỗi ứng dụng trên MacOS
    • ctrl + D hoặc phím menu để hiển thị menu điều khiển khi chạy gỡ lỗi ứng dụng trên Windown
    • Command + R để tải lại mã nguồn máy ảo IOS
    • R + R để tải lại mã nguồn máy ảo Android
  • Một vài lệnh vui vui để sửa lỗi (Bật terminal hoặc cmd trong project vừa khởi động)

    • Không khởi động được server để build khi chạy debug trên android thì chạy

      this.setState({
      	message: "Chào mừng",
      	key: "Value",
      })
      console.log(this.state.message) //không nên
      // không sử dụng this.state ngay sau khi vừa set xong
      // biến truyền vào cho hàm setState là một đối tượng có dạng key: value.
      5

    • Khi chạy Android mà không sử dụng code react-native mới nhất, thì hãy chạy dòng này (Build toàn bộ mã nguồn của bạn thành 1 tệp và đặt nó vào trong tài sản, tạo các tài nguyên android tương ứng mà bạn sử dụng)

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

class CustomText extends Component {
    constructor(props) {
        super(props);
    }

    render() {
        return (
            <Text>{this.props.message}</Text>   /*Sử dụng props được truyền từ ngoài vào.*/
        );
    }
}

export default class App extends Component {
    constructor(props) {
        super(props);
        this.state = {
            message: "Welcome to Code 101 - React-native"
        }
    }

    render() {
        return (
            <CustomText message={this.state.message} /> /*truyền 1 props vào cho thằng con sử dụng.*/
        );
    }
}
3

  • Khi APK chung mà bị lỗi gấp đôi tài nguyên thì xóa thư mục drawable trong android/app/src/main/res thì sẽ build được

  • Khi chạy ứng dụng ios bị lỗi "Không thể tìm thấy tệp đầu vào bản dựng. '. /Ví dụ/node_modules/Reac-native/bên thứ ba/chuyển đổi kép-1. 1. 6/src/strtod. cc'" thì run 2 command line after

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

class CustomText extends Component {
    constructor(props) {
        super(props);
    }

    render() {
        return (
            <Text>{this.props.message}</Text>   /*Sử dụng props được truyền từ ngoài vào.*/
        );
    }
}

export default class App extends Component {
    constructor(props) {
        super(props);
        this.state = {
            message: "Welcome to Code 101 - React-native"
        }
    }

    render() {
        return (
            <CustomText message={this.state.message} /> /*truyền 1 props vào cho thằng con sử dụng.*/
        );
    }
}
4

Chú thích phiên bản glog (0. 3. 5) mà bạn đang sử dụng

5. Các thành phần cơ bản của dự án

Cấu hình thư mục cấu trúc mà bạn nhìn thấy có thể sẽ như dưới đây (tùy chọn phiên bản react-native hiện tại của bạn). Hình bên dưới không bao gồm một vài tệp bị ẩn cấu hình thuộc tính của phản ứng gốc

Phản ứng css bản địa

  • Thư mục Android. chứa toàn bộ nguồn xây dựng ứng dụng Android. Chúng ta có thể mở thư mục Android bằng Android studio và chạy ứng dụng thay vì sử dụng dòng lệnh

    import React, { Component } from 'react';
    import { Text, View } from 'react-native';
    
    class CustomText extends Component {
        constructor(props) {
            super(props);
        }
    
        render() {
            return (
                <Text>{this.props.message}</Text>   /*Sử dụng props được truyền từ ngoài vào.*/
            );
        }
    }
    
    export default class App extends Component {
        constructor(props) {
            super(props);
            this.state = {
                message: "Welcome to Code 101 - React-native"
            }
        }
    
        render() {
            return (
                <CustomText message={this.state.message} /> /*truyền 1 props vào cho thằng con sử dụng.*/
            );
        }
    }
    5 nhưng có thể ứng dụng sẽ không xây dựng mã javascript và sẽ hiển thị màn hình trắng trên điện thoại Android

  • Thư mục IOS. chứa toàn bộ nguồn xây dựng ứng dụng IOS. We can open file ProjectName. xcodeproj bằng Xcode để chạy ứng dụng IOS thay vì sử dụng dòng lệnh

    import React, { Component } from 'react';
    import { Text, View } from 'react-native';
    
    class CustomText extends Component {
        constructor(props) {
            super(props);
        }
    
        render() {
            return (
                <Text>{this.props.message}</Text>   /*Sử dụng props được truyền từ ngoài vào.*/
            );
        }
    }
    
    export default class App extends Component {
        constructor(props) {
            super(props);
            this.state = {
                message: "Welcome to Code 101 - React-native"
            }
        }
    
        render() {
            return (
                <CustomText message={this.state.message} /> /*truyền 1 props vào cho thằng con sử dụng.*/
            );
        }
    }
    4. Lần đầu tiên có thể chạy hơi lâu nhưng những lần tiếp theo sẽ nhanh hơn việc xây dựng bằng dòng lệnh

  • Node_modules thư mục. chứa toàn bộ gói (thư viện) cần thiết để chạy một ứng dụng gốc phản ứng

  • gói tập tin. js. tệp quản lý các gói nodejs đi kèm với dự án. Nếu bạn tải các dự án demo về cần sử dụng dòng lệnh

    import React, { Component } from 'react';
    import { Text, View } from 'react-native';
    
    class CustomText extends Component {
        constructor(props) {
            super(props);
        }
    
        render() {
            return (
                <Text>{this.props.message}</Text>   /*Sử dụng props được truyền từ ngoài vào.*/
            );
        }
    }
    
    export default class App extends Component {
        constructor(props) {
            super(props);
            this.state = {
                message: "Welcome to Code 101 - React-native"
            }
        }
    
        render() {
            return (
                <CustomText message={this.state.message} /> /*truyền 1 props vào cho thằng con sử dụng.*/
            );
        }
    }
    3 để tải toàn bộ thư viện yêu cầu của dự án về

  • Khóa gói tệp. js được gọi chung sau khi chạy cài đặt

    import React, { Component } from 'react';
    import { Text, View } from 'react-native';
    
    class CustomText extends Component {
        constructor(props) {
            super(props);
        }
    
        render() {
            return (
                <Text>{this.props.message}</Text>   /*Sử dụng props được truyền từ ngoài vào.*/
            );
        }
    }
    
    export default class App extends Component {
        constructor(props) {
            super(props);
            this.state = {
                message: "Welcome to Code 101 - React-native"
            }
        }
    
        render() {
            return (
                <CustomText message={this.state.message} /> /*truyền 1 props vào cho thằng con sử dụng.*/
            );
        }
    }
    3

  • chỉ mục tệp. js. tệp đầu tiên được ràng buộc khi chạy ứng dụng. Tập tin này sẽ đăng ký một thành phần, thành phần này sẽ được tải lên lần đầu tiên khi chạy, mặc định ứng dụng sẽ đăng ký thành phần trong Ứng dụng. js

  • ứng dụng tệp. json. file config tên ứng dụng và tên hiển thị

  • ứng dụng tệp. js là một thành phần mặc định có sử dụng một số Thành phần khác như Văn bản, Chế độ xem

6. Thành phần trong React-Native

Thành phần là một thành phần cơ bản trong ứng dụng phản ứng gốc. Mọi chế độ xem, màn hình đều được kế thừa từ lớp thành phần này

6. 1. Vòng đời của component

Phản ứng css bản địa

( Nguồn. Internet)

Các hàm được gọi trong vòng đời của Component

  • constructor(props) - Hàm khởi tạo thành phần. Trong hàm này, chúng ta thường sử dụng để khởi tạo trạng thái, ràng buộc các hàm con của thành phần.
    Lưu ý. Không thể thay đổi trạng thái bằng phương thức

    import React, { Component } from 'react';
    import { Text, View } from 'react-native';
    
    class CustomText extends Component {
        constructor(props) {
            super(props);
        }
    
        render() {
            return (
                <Text>{this.props.message}</Text>   /*Sử dụng props được truyền từ ngoài vào.*/
            );
        }
    }
    
    export default class App extends Component {
        constructor(props) {
            super(props);
            this.state = {
                message: "Welcome to Code 101 - React-native"
            }
        }
    
        render() {
            return (
                <CustomText message={this.state.message} /> /*truyền 1 props vào cho thằng con sử dụng.*/
            );
        }
    }
    90 trong hàm này.

  • componentWillMount() - Hàm này sẽ bị loại bỏ ở phiên bản mới

  • render() - Đây là hàm bắt buộc có trong thành phần. Sau khi khởi động, hàm này được gọi để trả về các thành phần hiển thị trên màn hình.
    Hàm này sẽ tự động được gọi lại khi trạng thái hoặc đạo cụ của nó thay đổi. Chỉ những component có sử dụng state hoặc props thì mới được gọi lại để render lại.

    Lưu ý.

    • Trong hàm này cũng không được sử dụng phương thức
      import React, { Component } from 'react';
      import { Text, View } from 'react-native';
      
      class CustomText extends Component {
          constructor(props) {
              super(props);
          }
      
          render() {
              return (
                  <Text>{this.props.message}</Text>   /*Sử dụng props được truyền từ ngoài vào.*/
              );
          }
      }
      
      export default class App extends Component {
          constructor(props) {
              super(props);
              this.state = {
                  message: "Welcome to Code 101 - React-native"
              }
          }
      
          render() {
              return (
                  <CustomText message={this.state.message} /> /*truyền 1 props vào cho thằng con sử dụng.*/
              );
          }
      }
      90
    • Trong hàm này không nên chạy xử lý nhiều dữ liệu để không bị lag khi kết xuất (nên xử lý dữ liệu trong componentDidMount hoặc hàm tạo)
  • componentDidMount() - Hàm này sẽ được gọi ngay sau khi hàm render() được gọi lần đầu tiên. Thông thường trong hàm này ta có thể lấy dữ liệu từ máy chủ hoặc máy khách để kết xuất dữ liệu ra. Khi chạy đến đây, các phần từ đã được sinh ra rồi, ta có thể tương tác với các thành phần UI

  • componentWillReceiveProps(nextProps) - Hàm này được gọi khi props của thành phần được khởi tạo thay đổi

  • shouldComponentUpdate(nextProps, nextState) - Hàm này được gọi trước render() khi cập nhật dữ liệu. Hàm này trả về giá trị đúng hoặc sai. If false, not call back function render default it return true

  • componentWillUpdate(nextProps, nextState) - Hàm này được gọi ngay sau khi hàm shouldComponentUpdate() trả về true. Trong hàm này cũng không được đặt lại trạng thái

  • componentDidUpdate(prevProps, prevState) - Hàm này được gọi ngay sau hàm render() từ lần thứ 2 trở đi

  • componentWillUnmount() - Hàm này được gọi khi thành phần này bị loại bỏ. Chúng ta nên thực hiện các thao tác thu gọn, hủy hẹn giờ hoặc các tiến trình đang xử lý

6. 2. Các thành phần cơ bản của thành phần

Sau đây là chương trình mẫu cơ bản để hiểu được các thành phần của một Thành phần

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

class CustomText extends Component {
    constructor(props) {
        super(props);
    }

    render() {
        return (
            <Text>{this.props.message}</Text>   /*Sử dụng props được truyền từ ngoài vào.*/
        );
    }
}

export default class App extends Component {
    constructor(props) {
        super(props);
        this.state = {
            message: "Welcome to Code 101 - React-native"
        }
    }

    render() {
        return (
            <CustomText message={this.state.message} /> /*truyền 1 props vào cho thằng con sử dụng.*/
        );
    }
}
1

  • Trạng thái - là biến điều khiển trạng thái nội bộ của 1 thành phần. State can change by way call this function. setState({. }). Mỗi lần thay đổi trạng thái, hàm render sẽ được gọi lại ngay sau đó (hàm render chỉ thay đổi các thành phần có liên quan đến các giá trị trong trạng thái bị thay đổi).
    Chúng ta nên bỏ qua các biến có liên quan đến giao diện người dùng trong trạng thái này, để khi trạng thái thay đổi, màn hình giao diện người dùng sẽ được vẽ lại và thay đổi theo.
    Lưu ý. Không thể thay đổi trạng thái trực tiếp bằng cách gọi điều này. trạng thái = {. } nếu sử dụng thay đổi trạng thái trực tiếp toàn bộ thành phần này sẽ không còn hoạt động đúng như mong muốn nữa.

  • Props - là các thuộc tính được kẻ sử dụng truyền vào. Đây là các thông số được truyền vào để tùy chỉnh theo ý muốn của người xây dựng Thành phần. Khác với trạng thái chúng ta không thể thay đổi props ở trong bản thân chính của nó. Chúng ta chỉ nên đọc các thuộc tính được truyền vào để sử dụng mà thôi.
    Ví dụ sử dụng props. also as ví dụ trên nhưng chúng ta tùy chỉnh một số thứ để bạn có thể hiểu rõ hơn về props.

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

class CustomText extends Component {
    constructor(props) {
        super(props);
    }

    render() {
        return (
            <Text>{this.props.message}</Text>   /*Sử dụng props được truyền từ ngoài vào.*/
        );
    }
}

export default class App extends Component {
    constructor(props) {
        super(props);
        this.state = {
            message: "Welcome to Code 101 - React-native"
        }
    }

    render() {
        return (
            <CustomText message={this.state.message} /> /*truyền 1 props vào cho thằng con sử dụng.*/
        );
    }
}

6. 3. Một số hàm đặc biệt

  • Hàm này. setState() - Hàm dùng để thay đổi trạng thái của thành phần. Đây là phương thức chính để cập nhật giao diện người dùng. Khi hàm này thực thi xong thì hàm render() sẽ tự động gọi lại. Những giá trị bất kỳ của trạng thái thay đổi thì chỉ những thành phần có sử dụng biến trạng thái tương ứng được gọi để vẽ lại giao diện người dùng.
    Lưu ý. this function run any ĐỒNG BỘ, chúng ta không nên đọc giá trị sau khi gọi hàm này.
    Cách sử dụng.

this.setState({
	message: "Chào mừng",
	key: "Value",
})
console.log(this.state.message) //không nên
// không sử dụng this.state ngay sau khi vừa set xong
// biến truyền vào cho hàm setState là một đối tượng có dạng key: value.

Có thể sử dụng gọi lại để kiểm tra dữ liệu hoặc xử lý một số tác vụ sau khi thay đổi trạng thái

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

class CustomText extends Component {
    constructor(props) {
        super(props);
    }

    render() {
        return (
            <Text>{this.props.message}</Text>   /*Sử dụng props được truyền từ ngoài vào.*/
        );
    }
}

export default class App extends Component {
    constructor(props) {
        super(props);
        this.state = {
            message: "Welcome to Code 101 - React-native"
        }
    }

    render() {
        return (
            <CustomText message={this.state.message} /> /*truyền 1 props vào cho thằng con sử dụng.*/
        );
    }
}
9

  • Hàm forceUpdate() - Mặc định hàm render() sẽ được gọi khi props hoặc state thay đổi. Nhưng nếu một vài thành phần UI sử dụng một số dữ liệu khác trạng thái hoặc prop muốn thay đổi, thì chúng ta cần thông báo cho React biết để vẽ lại toàn bộ bằng cách gọi hàm forceUpdate()

6. 4. Một vài lưu ý nhỏ khi sử dụng React-Native

  • Dữ liệu cần có trong màn hình và cần thay đổi lại giao diện người dùng khi nó thay đổi thì đặt vào trạng thái
  • Dữ liệu không cần thay đổi UI khi nó thay đổi thì có thể sử dụng
    import React, { Component } from 'react';
    import { Text, View } from 'react-native';
    
    class CustomText extends Component {
        constructor(props) {
            super(props);
        }
    
        render() {
            return (
                <Text>{this.props.message}</Text>   /*Sử dụng props được truyền từ ngoài vào.*/
            );
        }
    }
    
    export default class App extends Component {
        constructor(props) {
            super(props);
            this.state = {
                message: "Welcome to Code 101 - React-native"
            }
        }
    
        render() {
            return (
                <CustomText message={this.state.message} /> /*truyền 1 props vào cho thằng con sử dụng.*/
            );
        }
    }
    92 như biến này để có thể thực hiện thao tác = (gán) và sử dụng trực tiếp như các biến thông thường
  • Data in prop thì không nên thay đổi
  • Trong trạng thái chỉ nên chứa dữ liệu, không nên chứa các View / Thành phần trong trạng thái. Làm như vậy có thể gây ra gấp đôi dữ liệu và công việc quản lý giao diện người dùng trở nên phức tạp hơn và tùy biến sau này

7. Design Design View (Kiểu)

Sau đây là đoạn mã Demo về Style của ứng dụng React-Native. Mã có sẵn trong Ví dụ (Example/app/modules/screens/Home/StyleDemo)

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

class CustomText extends Component {
    constructor(props) {
        super(props);
    }

    render() {
        return (
            <Text>{this.props.message}</Text>   /*Sử dụng props được truyền từ ngoài vào.*/
        );
    }
}

export default class App extends Component {
    constructor(props) {
        super(props);
        this.state = {
            message: "Welcome to Code 101 - React-native"
        }
    }

    render() {
        return (
            <CustomText message={this.state.message} /> /*truyền 1 props vào cho thằng con sử dụng.*/
        );
    }
}
6

Giống như một ứng dụng web cơ bản, React-Native sử dụng một số thẻ css để vẽ những gì bạn muốn. Nếu bạn đang lập trình web quen thuộc với css thì việc thiết kế này khá đơn giản. Để trau dồi những khả năng này chỉ có cách là làm cho nhiều bạn sẽ khám phá ra những phong cách bạn muốn và sẽ làm cho ứng dụng của bạn đẹp hơn

At ví dụ về bạn có thể thay đổi các thuộc tính của kiểu rồi tải lại để thấy sự thay đổi nhé

Trong ví dụ thư mục Trang chủ, tôi đã chia Phần kiểu qua một tệp khác để dễ quản lý (Từ các ví dụ sau trở đi, tôi sẽ chia phần kiểu này sang một tệp khác để dễ quản lý). Bạn có thể vào đó, thử thay đổi, xóa sửa đổi để biết được thuộc tính nào dùng để làm gì nhé. Làm nhiều phần này thì sẽ có kinh nghiệm thiết kế đẹp thôi

Một vài lưu ý

  • Bạn nên biết thuộc tính nào dùng để làm gì, sử dụng tối ưu để đạt hiệu quả cao nhất (Có thể sao chép mã của ai đó nhưng nên hiểu dòng kiểu nào làm việc gì)
  • Không nên quá truy quét mã rút ngắn nhưng đạt được yêu cầu là tốt nhất

8. Kỹ thuật Gỡ lỗi cơ bản

Xây dựng ứng dụng React-Native khác với ứng dụng gốc là bạn không thể đặt điểm dừng rồi chạy và chờ chương trình nhảy vào vị trí mà bạn mong đợi và xem trạng thái hay biến lúc đó bằng bao nhiêu đang diễn ra . Thay vào đó, chương trình React-Native cho phép bạn nhập giá trị tại thời điểm đó và xuất ra màn hình bảng điều khiển.
Sử dụng lệnh

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

class CustomText extends Component {
    constructor(props) {
        super(props);
    }

    render() {
        return (
            <Text>{this.props.message}</Text>   /*Sử dụng props được truyền từ ngoài vào.*/
        );
    }
}

export default class App extends Component {
    constructor(props) {
        super(props);
        this.state = {
            message: "Welcome to Code 101 - React-native"
        }
    }

    render() {
        return (
            <CustomText message={this.state.message} /> /*truyền 1 props vào cho thằng con sử dụng.*/
        );
    }
}
93 để đánh giá giá trị của biến bất kỳ (xem ví dụ hướng về để biết giá trị của thông báo biến trong trạng thái)

Xcode và Android studio mặc định khi chạy gỡ lỗi sẽ xuất các nhật ký này ra trong phần Tất cả đầu ra (Xcode), Logcat (Android Studio)

Bên cạnh đó, bạn có thể sử dụng chức năng gỡ lỗi JS từ xa (xem phần hiển thị trình đơn điều khiển trong mục 4) để xem nhật ký này trong phần bảng điều khiển của trình duyệt web

Ngoài ra, bạn có thể sử dụng thiết bị đầu cuối (cmd) để xem nhật ký IOS hoặc Android bằng cách nhập lệnh

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

class CustomText extends Component {
    constructor(props) {
        super(props);
    }

    render() {
        return (
            <Text>{this.props.message}</Text>   /*Sử dụng props được truyền từ ngoài vào.*/
        );
    }
}

export default class App extends Component {
    constructor(props) {
        super(props);
        this.state = {
            message: "Welcome to Code 101 - React-native"
        }
    }

    render() {
        return (
            <CustomText message={this.state.message} /> /*truyền 1 props vào cho thằng con sử dụng.*/
        );
    }
}
8

9. Các Component thường sử dụng

Dưới đây là code demo những thành phần cơ bản thường dùng. Bạn có thể mã lại, sao chép hoặc chạy bản demo từ ví dụ (bản demo có sử dụng hình ảnh nên bạn phải sao chép hình ảnh trong ví dụ - Ví dụ/ứng dụng/tài sản/hình ảnh)

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

class CustomText extends Component {
    constructor(props) {
        super(props);
    }

    render() {
        return (
            <Text>{this.props.message}</Text>   /*Sử dụng props được truyền từ ngoài vào.*/
        );
    }
}

export default class App extends Component {
    constructor(props) {
        super(props);
        this.state = {
            message: "Welcome to Code 101 - React-native"
        }
    }

    render() {
        return (
            <CustomText message={this.state.message} /> /*truyền 1 props vào cho thằng con sử dụng.*/
        );
    }
}
9

Sau khi chạy Demo ta được UI như sau (chạy ví dụ thì click vào component)

Phản ứng css bản địa

9. 1. Lượt xem

Là một thành phần cũng thường xuyên được sử dụng. Thường được sử dụng với mục đích chia các chế độ xem theo hàng dọc hoặc hàng ngang dựa trên thuộc tính flexDirection trong kiểu là 'cột/hàng' (dọc / ngang), hoặc sử dụng để chứa nhiều chế độ xem con hoặc khi cần thiết trong màn hình

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

class CustomText extends Component {
    constructor(props) {
        super(props);
    }

    render() {
        return (
            <Text>{this.props.message}</Text>   /*Sử dụng props được truyền từ ngoài vào.*/
        );
    }
}

export default class App extends Component {
    constructor(props) {
        super(props);
        this.state = {
            message: "Welcome to Code 101 - React-native"
        }
    }

    render() {
        return (
            <CustomText message={this.state.message} /> /*truyền 1 props vào cho thằng con sử dụng.*/
        );
    }
}
0

uốn cong. 1 ở kiểu sẽ giúp kéo xem có thể mở rộng hết các khung chứa

9. 2. Chữ

Use to display 1 message up screen. Có thể sử dụng văn bản cố định hoặc trong nội dung của một biến trên màn hình

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

class CustomText extends Component {
    constructor(props) {
        super(props);
    }

    render() {
        return (
            <Text>{this.props.message}</Text>   /*Sử dụng props được truyền từ ngoài vào.*/
        );
    }
}

export default class App extends Component {
    constructor(props) {
        super(props);
        this.state = {
            message: "Welcome to Code 101 - React-native"
        }
    }

    render() {
        return (
            <CustomText message={this.state.message} /> /*truyền 1 props vào cho thằng con sử dụng.*/
        );
    }
}
40

9. 3. Hình ảnh

Use to display image up screen. Có 3 cách hiển thị

  • Hiển thị ảnh cục bộ

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

class CustomText extends Component {
    constructor(props) {
        super(props);
    }

    render() {
        return (
            <Text>{this.props.message}</Text>   /*Sử dụng props được truyền từ ngoài vào.*/
        );
    }
}

export default class App extends Component {
    constructor(props) {
        super(props);
        this.state = {
            message: "Welcome to Code 101 - React-native"
        }
    }

    render() {
        return (
            <CustomText message={this.state.message} /> /*truyền 1 props vào cho thằng con sử dụng.*/
        );
    }
}
41

  • Hiển thị ảnh từ url

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

class CustomText extends Component {
    constructor(props) {
        super(props);
    }

    render() {
        return (
            <Text>{this.props.message}</Text>   /*Sử dụng props được truyền từ ngoài vào.*/
        );
    }
}

export default class App extends Component {
    constructor(props) {
        super(props);
        this.state = {
            message: "Welcome to Code 101 - React-native"
        }
    }

    render() {
        return (
            <CustomText message={this.state.message} /> /*truyền 1 props vào cho thằng con sử dụng.*/
        );
    }
}
42

  • Show ảnh base 64

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

class CustomText extends Component {
    constructor(props) {
        super(props);
    }

    render() {
        return (
            <Text>{this.props.message}</Text>   /*Sử dụng props được truyền từ ngoài vào.*/
        );
    }
}

export default class App extends Component {
    constructor(props) {
        super(props);
        this.state = {
            message: "Welcome to Code 101 - React-native"
        }
    }

    render() {
        return (
            <CustomText message={this.state.message} /> /*truyền 1 props vào cho thằng con sử dụng.*/
        );
    }
}
43

Resize Mode quen thuộc

  • che. (default) Hình ảnh sẽ giữ nguyên trạng thái. Ảnh sẽ lớn hơn hoặc bằng khung chứa

  • Lưu trữ. Hình ảnh vẫn giữ nguyên giá trị. Ảnh sẽ nhỏ hơn hoặc bằng khung chứa

  • trung tâm. Căn giữa hình ảnh theo 2 chiều. Lấy phần ở giữa, gần giống với bìa

  • nói lại. lặp lại hình ảnh để kiểm tra hết kích thước ô chứa

  • căng ra. Thay đổi tỷ lệ hình ảnh để kéo mở rộng bằng ô chứa

9. 4. Cái nút

Cách sử dụng một nút

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

class CustomText extends Component {
    constructor(props) {
        super(props);
    }

    render() {
        return (
            <Text>{this.props.message}</Text>   /*Sử dụng props được truyền từ ngoài vào.*/
        );
    }
}

export default class App extends Component {
    constructor(props) {
        super(props);
        this.state = {
            message: "Welcome to Code 101 - React-native"
        }
    }

    render() {
        return (
            <CustomText message={this.state.message} /> /*truyền 1 props vào cho thằng con sử dụng.*/
        );
    }
}
44

Thông thường mình ít khi sử dụng Nút vì lý do tùy chỉnh kiểu nó không hoạt động đúng với cả Android và IOS vì vậy nên mình thường sử dụng TouchableOpacity hơn. Nhưng lưu ý cách sử dụng sự kiện onPress

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

class CustomText extends Component {
    constructor(props) {
        super(props);
    }

    render() {
        return (
            <Text>{this.props.message}</Text>   /*Sử dụng props được truyền từ ngoài vào.*/
        );
    }
}

export default class App extends Component {
    constructor(props) {
        super(props);
        this.state = {
            message: "Welcome to Code 101 - React-native"
        }
    }

    render() {
        return (
            <CustomText message={this.state.message} /> /*truyền 1 props vào cho thằng con sử dụng.*/
        );
    }
}
94 Vui lòng viết theo cấu trúc này để giảm thiểu sai sót hoặc phải ràng buộc hàm trong contrucstor trước khi sử dụng. Sự kiện onPress chỉ có một số thành phần được hỗ trợ, Text thì không hỗ trợ nên nếu muốn sử dụng onPress cho Text thì đọc phần TouchableOpacity phía bên dưới nhé

9. 5. TouchableOpacity

Thông thường mình thay thế việc sử dụng Button bằng TouchableOpacity để định dạng style giống nhau cho cả android và ios, TouchableOpacity có thể chứa bất kỳ chế độ xem con nào và nhớ lưu ý cách sử dụng sự kiện trên Press like Button nhé.

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

class CustomText extends Component {
    constructor(props) {
        super(props);
    }

    render() {
        return (
            <Text>{this.props.message}</Text>   /*Sử dụng props được truyền từ ngoài vào.*/
        );
    }
}

export default class App extends Component {
    constructor(props) {
        super(props);
        this.state = {
            message: "Welcome to Code 101 - React-native"
        }
    }

    render() {
        return (
            <CustomText message={this.state.message} /> /*truyền 1 props vào cho thằng con sử dụng.*/
        );
    }
}
45

9. 6. danh sách phẳng

Đây là Thành phần thường được sử dụng để hiển thị 1 danh sách trên màn hình.
Cách sử dụng.

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

class CustomText extends Component {
    constructor(props) {
        super(props);
    }

    render() {
        return (
            <Text>{this.props.message}</Text>   /*Sử dụng props được truyền từ ngoài vào.*/
        );
    }
}

export default class App extends Component {
    constructor(props) {
        super(props);
        this.state = {
            message: "Welcome to Code 101 - React-native"
        }
    }

    render() {
        return (
            <CustomText message={this.state.message} /> /*truyền 1 props vào cho thằng con sử dụng.*/
        );
    }
}
46

Một vài lưu ý khi sử dụng Flatlist

  • When an data section (ví dụ data[0] =. ) của bạn thay đổi thông thường thì không vẽ lại giao diện người dùng cho nên bạn sẽ cần thêm một thuộc tính là

    import React, { Component } from 'react';
    import { Text, View } from 'react-native';
    
    class CustomText extends Component {
        constructor(props) {
            super(props);
        }
    
        render() {
            return (
                <Text>{this.props.message}</Text>   /*Sử dụng props được truyền từ ngoài vào.*/
            );
        }
    }
    
    export default class App extends Component {
        constructor(props) {
            super(props);
            this.state = {
                message: "Welcome to Code 101 - React-native"
            }
        }
    
        render() {
            return (
                <CustomText message={this.state.message} /> /*truyền 1 props vào cho thằng con sử dụng.*/
            );
        }
    }
    95. Lúc này mỗi lần thay đổi trạng thái thì danh sách được vẽ lại

  • Có thể sử dụng Flatlist để làm như GridView trong android dựa trên thuộc tính numColumns={colum} (colum là cột số). Nhưng bạn cần phải tính toán chiều rộng, chiều cao của mỗi cột để hiển thị đẹp nhất (Không có sẵn như fill_parent trong android)

Các thành phần trên mình chỉ mang tính chất giới thiệu để các bạn tìm hiểu. Để hiểu rõ hơn cũng như tìm hiểu thêm về các thuộc tính của từng thành phần thì vui lòng đọc tài liệu riêng của các thành phần nhé. Mỗi thành phần sẽ có nhiều thuộc tính khác nhau để hỗ trợ bạn làm giao diện người dùng tốt và mượt nhất có thể

10. Prop và cách truyền dữ liệu giữa các View (Screen)

Tạo ứng dụng tệp. js as after

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

class CustomText extends Component {
    constructor(props) {
        super(props);
    }

    render() {
        return (
            <Text>{this.props.message}</Text>   /*Sử dụng props được truyền từ ngoài vào.*/
        );
    }
}

export default class App extends Component {
    constructor(props) {
        super(props);
        this.state = {
            message: "Welcome to Code 101 - React-native"
        }
    }

    render() {
        return (
            <CustomText message={this.state.message} /> /*truyền 1 props vào cho thằng con sử dụng.*/
        );
    }
}
47

và 1 tệp ViewItem. js nằm cùng thư mục

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

class CustomText extends Component {
    constructor(props) {
        super(props);
    }

    render() {
        return (
            <Text>{this.props.message}</Text>   /*Sử dụng props được truyền từ ngoài vào.*/
        );
    }
}

export default class App extends Component {
    constructor(props) {
        super(props);
        this.state = {
            message: "Welcome to Code 101 - React-native"
        }
    }

    render() {
        return (
            <CustomText message={this.state.message} /> /*truyền 1 props vào cho thằng con sử dụng.*/
        );
    }
}
48

Trong Ví dụ mình đã phong cách lại và đưa nó ra 1 tệp riêng là phong cách. js để dễ quản lý (bản demo trên có sử dụng hình ảnh nên bạn phải sao chép hình ảnh trong ví dụ - Ví dụ/ứng dụng/nội dung/hình ảnh)

At the ví dụ trên ta demo việc truyền dữ liệu giữa 2 component information through props

Bên gửi qua (ViewItem close vai trò là 1 thành phần được tùy biến)

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

class CustomText extends Component {
    constructor(props) {
        super(props);
    }

    render() {
        return (
            <Text>{this.props.message}</Text>   /*Sử dụng props được truyền từ ngoài vào.*/
        );
    }
}

export default class App extends Component {
    constructor(props) {
        super(props);
        this.state = {
            message: "Welcome to Code 101 - React-native"
        }
    }

    render() {
        return (
            <CustomText message={this.state.message} /> /*truyền 1 props vào cho thằng con sử dụng.*/
        );
    }
}
49

Bên nhận dữ liệu có thể sử dụng dữ liệu được truyền thông qua đạo cụ. (Kiểu nó ném mấy cái dữ liệu qua thì bên nhận này truy xuất thông tin qua props)

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

class CustomText extends Component {
    constructor(props) {
        super(props);
    }

    render() {
        return (
            <Text>{this.props.message}</Text>   /*Sử dụng props được truyền từ ngoài vào.*/
        );
    }
}

export default class App extends Component {
    constructor(props) {
        super(props);
        this.state = {
            message: "Welcome to Code 101 - React-native"
        }
    }

    render() {
        return (
            <CustomText message={this.state.message} /> /*truyền 1 props vào cho thằng con sử dụng.*/
        );
    }
}
10

Việc truyền ngược dữ liệu cũng có thể được thực hiện trong ví dụ thông qua việc xử lý sự kiện onPressItem()

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

class CustomText extends Component {
    constructor(props) {
        super(props);
    }

    render() {
        return (
            <Text>{this.props.message}</Text>   /*Sử dụng props được truyền từ ngoài vào.*/
        );
    }
}

export default class App extends Component {
    constructor(props) {
        super(props);
        this.state = {
            message: "Welcome to Code 101 - React-native"
        }
    }

    render() {
        return (
            <CustomText message={this.state.message} /> /*truyền 1 props vào cho thằng con sử dụng.*/
        );
    }
}
11

Một vài lưu ý khi sử dụng props

  • Không thay đổi dữ liệu trong prop ở bên nhận
  • Nên chia mỗi thành phần riêng biệt ra từng thành phần riêng và giao tiếp với thành phần chính thông qua đạo cụ để giảm thiểu công việc phải vẽ lại toàn bộ nguyên bộ, tốt nhất là những thành phần có chứa các bộ đếm thời gian (setInterval(), setTimeOut(). )
  • ...

11. Cài đặt và sử dụng thư viện

11. 1. Cài đặt thư viện

Thông thường trong React-Native sử dụng thư viện rất nhiều có thể vì một vài lý do

  • Code from the header thì lâu hơn
  • Thư viện được nhiều người xây dựng nên khả năng tốt hơn so với việc mình code một mình
  • Có cộng đồng hỗ trợ nên có lỗi thì cũng dễ sửa lỗi
  • Những thư viện liên quan đến SDK của các nhà phát triển như Facebook, Google, Firebase. đều được cộng đồng phát triển hỗ trợ bạn xây dựng ứng dụng tốt nhất
  • Và nhiều lý do khác nữa

Khi bạn gặp vấn đề hoặc cần phải làm một cái gì đó với react-native, hãy tìm Google với từ khóa react-native + cái gì bạn muốn làm. Ví dụ muốn làm chức năng đăng nhập với facebook thì có thể tìm được. phản ứng gốc đăng nhập với facebook. Đa phần bạn sẽ thấy thư viện hỗ trợ nằm ngay trên trang đầu tiên. Vui lòng vào trang chính của thư viện để xem cách cài đặt và sử dụng thư viện. Nhớ xem lại số sao và các vấn đề trước khi bạn muốn sử dụng thư viện nào trên github. Nếu thư viện được xuất bản trên npmjs https. //www. npmjs. com/ thì bạn có thể cài đặt thông qua

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

class CustomText extends Component {
    constructor(props) {
        super(props);
    }

    render() {
        return (
            <Text>{this.props.message}</Text>   /*Sử dụng props được truyền từ ngoài vào.*/
        );
    }
}

export default class App extends Component {
    constructor(props) {
        super(props);
        this.state = {
            message: "Welcome to Code 101 - React-native"
        }
    }

    render() {
        return (
            <CustomText message={this.state.message} /> /*truyền 1 props vào cho thằng con sử dụng.*/
        );
    }
}
96

11. 2. Liên kết thư viện

Một phần khá quan trọng, sau khi bạn kéo thư viện từ npm về, thì bạn cần liên kết thư viện đó vào ứng dụng của mình để ứng dụng có thể khởi động các phần mã gốc của thư viện hoặc được cấp quyền chạy một số tác vụ khác. Thông thường các thư viện đều có liên kết tự động thông qua lệnh

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

class CustomText extends Component {
    constructor(props) {
        super(props);
    }

    render() {
        return (
            <Text>{this.props.message}</Text>   /*Sử dụng props được truyền từ ngoài vào.*/
        );
    }
}

export default class App extends Component {
    constructor(props) {
        super(props);
        this.state = {
            message: "Welcome to Code 101 - React-native"
        }
    }

    render() {
        return (
            <CustomText message={this.state.message} /> /*truyền 1 props vào cho thằng con sử dụng.*/
        );
    }
}
97. Tùy vào từng thư viện sẽ có hướng dẫn và cách bổ sung liên kết. Bên cạnh đó một số thư viện không liên kết tự động hoặc dự án của bạn có vấn đề phải liên kết bằng tay lúc đó bạn nên tham khảo bài viết này trước để biết cách liên kết và hiểu sâu hơn https. //Facebook. github. io/Reac-native/docs/liên kết-thư viện-ios

11. 3. Edit thư viện

Phần trình quản lý mã nguồn (git/svn) sẽ không cam kết các thư viện có sẵn được cài đặt từ npm (thư mục node_modules) hoặc nếu mình cố gắng cam kết sẽ làm dự án của chúng ta nặng lên rất nhiều lần. Do vậy chúng ta không chỉnh sửa trực tiếp thư viện trong node_modules. Sau khi cài đặt và liên kết thư viện. You copy nguyên mã nguồn thư viện thông qua ứng dụng/mô-đun và tiến trình sửa đổi, biến thư viện tùy biến tại đây. Lúc nào sử dụng bộ nhớ chuyển đổi đường dẫn nhập thư viện thông qua dự án của bạn. Nếu đó là phần chỉnh sửa quan trọng trong hy vọng bạn sẽ đóng góp cho cộng đồng bằng cách báo cáo dự án chính hoặc chia sẻ lại cho mọi người

12. Chuyển đổi giữa các màn hình

Một ứng dụng bạn phát triển không thể chỉ có một màn hình. Vì vậy bạn phải biết cách chuyển đổi qua lại giữa các màn hình. Hiện tại mình sử dụng thư viện react-navigation (v. 2. 18. 1) để chuyển đổi giữa các màn hình. Các bạn có thể tìm hiểu thêm về thư viện này tại (https. // điều hướng phản ứng. tổ chức)

  • Cài đặt thư viện. Dựa vào dự án bạn tạo và chạy dòng lệnh sau để cài đặt thư viện

    import React, { Component } from 'react';
    import { Text, View } from 'react-native';
    
    class CustomText extends Component {
        constructor(props) {
            super(props);
        }
    
        render() {
            return (
                <Text>{this.props.message}</Text>   /*Sử dụng props được truyền từ ngoài vào.*/
            );
        }
    }
    
    export default class App extends Component {
        constructor(props) {
            super(props);
            this.state = {
                message: "Welcome to Code 101 - React-native"
            }
        }
    
        render() {
            return (
                <CustomText message={this.state.message} /> /*truyền 1 props vào cho thằng con sử dụng.*/
            );
        }
    }
    98

  • Sử dụng thư viện

- Xây dựng cấu trúc ứng dụng. Để bạn hiểu rõ hơn về phần demo sau vui lòng xem lại chỉ mục tệp. js trong Ví dụ (Ví dụ/ứng dụng/chỉ mục. js). Dưới đây là phần tạo cấu trúc sườn của ứng dụng dựa trên StackNavigator của thư viện phản ứng điều hướng

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

class CustomText extends Component {
    constructor(props) {
        super(props);
    }

    render() {
        return (
            <Text>{this.props.message}</Text>   /*Sử dụng props được truyền từ ngoài vào.*/
        );
    }
}

export default class App extends Component {
    constructor(props) {
        super(props);
        this.state = {
            message: "Welcome to Code 101 - React-native"
        }
    }

    render() {
        return (
            <CustomText message={this.state.message} /> /*truyền 1 props vào cho thằng con sử dụng.*/
        );
    }
}
12

Như bạn đã thấy ở trên ta khai báo 1 ứng dụng có 4 màn hình HOME, PHONG CÁCH, THÀNH PHẦN, PROPS. Mặc định màn hình nào ở trên cùng sẽ được xuất hiện đầu tiên.
Nội dung mỗi màn hình có định dạng.

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

class CustomText extends Component {
    constructor(props) {
        super(props);
    }

    render() {
        return (
            <Text>{this.props.message}</Text>   /*Sử dụng props được truyền từ ngoài vào.*/
        );
    }
}

export default class App extends Component {
    constructor(props) {
        super(props);
        this.state = {
            message: "Welcome to Code 101 - React-native"
        }
    }

    render() {
        return (
            <CustomText message={this.state.message} /> /*truyền 1 props vào cho thằng con sử dụng.*/
        );
    }
}
13

Trong đó Màn hình. Trang chủ là lớp được nhập từ màn hình mô-đun.
Save dòng command line.

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

class CustomText extends Component {
    constructor(props) {
        super(props);
    }

    render() {
        return (
            <Text>{this.props.message}</Text>   /*Sử dụng props được truyền từ ngoài vào.*/
        );
    }
}

export default class App extends Component {
    constructor(props) {
        super(props);
        this.state = {
            message: "Welcome to Code 101 - React-native"
        }
    }

    render() {
        return (
            <CustomText message={this.state.message} /> /*truyền 1 props vào cho thằng con sử dụng.*/
        );
    }
}
99

Dòng lệnh này thực hiện nhập toàn bộ các lớp được xuất ra thông qua chỉ mục tệp. js. Vì vậy nếu bạn thêm màn hình mới lưu ý vào chỉ mục tệp. js to export more class you have to create

- Move to screen. có 2 cách chuyển màn hình

  • Chuyển đổi và xóa toàn bộ màn hình trước đó

    import React, { Component } from 'react';
    import { Text, View } from 'react-native';
    
    class CustomText extends Component {
        constructor(props) {
            super(props);
        }
    
        render() {
            return (
                <Text>{this.props.message}</Text>   /*Sử dụng props được truyền từ ngoài vào.*/
            );
        }
    }
    
    export default class App extends Component {
        constructor(props) {
            super(props);
            this.state = {
                message: "Welcome to Code 101 - React-native"
            }
        }
    
        render() {
            return (
                <CustomText message={this.state.message} /> /*truyền 1 props vào cho thằng con sử dụng.*/
            );
        }
    }
    14

    thông số. {} - Đây là phần để bạn truyền dữ liệu qua màn hình tiếp theo. Bạn có thể truyền qua màn hình tiếp theo một đối tượng theo cú pháp này

  • Chuyển đổi và giữ lại màn hình trước để quay lại

    import React, { Component } from 'react';
    import { Text, View } from 'react-native';
    
    class CustomText extends Component {
        constructor(props) {
            super(props);
        }
    
        render() {
            return (
                <Text>{this.props.message}</Text>   /*Sử dụng props được truyền từ ngoài vào.*/
            );
        }
    }
    
    export default class App extends Component {
        constructor(props) {
            super(props);
            this.state = {
                message: "Welcome to Code 101 - React-native"
            }
        }
    
        render() {
            return (
                <CustomText message={this.state.message} /> /*truyền 1 props vào cho thằng con sử dụng.*/
            );
        }
    }
    15

    {} - Đây cũng là cách để bạn truyền một đối tượng qua màn hình tiếp theo.
    Mặc định nếu bạn hiển thị Thanh trạng thái thì sẽ có phím quay về, nhưng nếu cần thiết có thể quay về bằng cách gọi hàm sau đây.

    import React, { Component } from 'react';
    import { Text, View } from 'react-native';
    
    class CustomText extends Component {
        constructor(props) {
            super(props);
        }
    
        render() {
            return (
                <Text>{this.props.message}</Text>   /*Sử dụng props được truyền từ ngoài vào.*/
            );
        }
    }
    
    export default class App extends Component {
        constructor(props) {
            super(props);
            this.state = {
                message: "Welcome to Code 101 - React-native"
            }
        }
    
        render() {
            return (
                <CustomText message={this.state.message} /> /*truyền 1 props vào cho thằng con sử dụng.*/
            );
        }
    }
    60

    Hiển thị Thanh trạng thái

    import React, { Component } from 'react';
    import { Text, View } from 'react-native';
    
    class CustomText extends Component {
        constructor(props) {
            super(props);
        }
    
        render() {
            return (
                <Text>{this.props.message}</Text>   /*Sử dụng props được truyền từ ngoài vào.*/
            );
        }
    }
    
    export default class App extends Component {
        constructor(props) {
            super(props);
            this.state = {
                message: "Welcome to Code 101 - React-native"
            }
        }
    
        render() {
            return (
                <CustomText message={this.state.message} /> /*truyền 1 props vào cho thằng con sử dụng.*/
            );
        }
    }
    16

13. Giao tiếp Client vs Server

13. 1. API RESTful

Phản ứng css bản địa
(nguồn internet)

Nếu bạn chưa biết RESTful API là gì thì có thể đọc thêm bài viết này (https. //viblo. asia/p/thiet-ke-restful-api-GrLZD98Vlk0) để hiểu rõ hơn về RESTful API. Đây là một trong những biến chuẩn giao tiếp phổ biến giữa máy khách và máy chủ

Phần Demo này được trình bày khá rõ ràng và chi tiết trong ví dụ Ví dụ (app/modules/screens/RestFul/RestFul. js). Bạn nên chạy ví dụ trước để thấy cách hoạt động của nó. Demo bao gồm việc gọi api công khai từ https. //api. băng5. skyx. app/get_languages ​​(GET) and display results as after

Phản ứng css bản địa

  • File Design RestFull tổng quan. ứng dụng/libs/RESTClient. js

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

class CustomText extends Component {
    constructor(props) {
        super(props);
    }

    render() {
        return (
            <Text>{this.props.message}</Text>   /*Sử dụng props được truyền từ ngoài vào.*/
        );
    }
}

export default class App extends Component {
    constructor(props) {
        super(props);
        this.state = {
            message: "Welcome to Code 101 - React-native"
        }
    }

    render() {
        return (
            <CustomText message={this.state.message} /> /*truyền 1 props vào cho thằng con sử dụng.*/
        );
    }
}
17

Ở đây mình định nghĩa 1 lớp để quản lý việc trao đổi, giao tiếp giữa client và server. Hàm fetchData() là một hàm bất đồng bộ hỗ trợ gọi các phương thức RESTful

Và đây là cách chúng ta gọi hàm fetchData() và xác định rõ ràng 1 api truy cập để lấy danh sách ngôn ngữ. Lưu ý. Thay vì việc mình đặt trực tiếp link https. //api. băng5. skyx. app/get_languages ​​thì mình gọi lại hàm getBaseURL() là để sau này có api thay, thì mình không phải đi thay nhiều chỗ, chỉ cần vào config và thay đổi là xong

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

class CustomText extends Component {
    constructor(props) {
        super(props);
    }

    render() {
        return (
            <Text>{this.props.message}</Text>   /*Sử dụng props được truyền từ ngoài vào.*/
        );
    }
}

export default class App extends Component {
    constructor(props) {
        super(props);
        this.state = {
            message: "Welcome to Code 101 - React-native"
        }
    }

    render() {
        return (
            <CustomText message={this.state.message} /> /*truyền 1 props vào cho thằng con sử dụng.*/
        );
    }
}
18

Ví dụ fetchData() với phương thức POST

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

class CustomText extends Component {
    constructor(props) {
        super(props);
    }

    render() {
        return (
            <Text>{this.props.message}</Text>   /*Sử dụng props được truyền từ ngoài vào.*/
        );
    }
}

export default class App extends Component {
    constructor(props) {
        super(props);
        this.state = {
            message: "Welcome to Code 101 - React-native"
        }
    }

    render() {
        return (
            <CustomText message={this.state.message} /> /*truyền 1 props vào cho thằng con sử dụng.*/
        );
    }
}
19

  • Cách sử dụng RESTClient

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

class CustomText extends Component {
    constructor(props) {
        super(props);
    }

    render() {
        return (
            <Text>{this.props.message}</Text>   /*Sử dụng props được truyền từ ngoài vào.*/
        );
    }
}

export default class App extends Component {
    constructor(props) {
        super(props);
        this.state = {
            message: "Welcome to Code 101 - React-native"
        }
    }

    render() {
        return (
            <CustomText message={this.state.message} /> /*truyền 1 props vào cho thằng con sử dụng.*/
        );
    }
}
0

Lưu ý. Phương thức getLanguagesFromServer() nên gọi trong componentDidMount() hoặc các sự kiện sau khi constructor() hoàn tất để giải quyết những lỗi có nguy cơ ẩn ẩn ví dụ như api nhanh quá, contrucstor chạy chưa xong và nó đi setState() thì ứng dụng

13. 2. ổ cắm web

Sắp có

14. Lưu trữ dữ liệu

React-Native default. Xem phần Lưu trữ bên dưới để tìm hiểu thêm về phương pháp lưu trữ này. Bên cạnh đó mình xin được giới thiệu phương pháp lưu trữ theo dạng dữ liệu có cấu trúc sử dụng cơ sở dữ liệu cảnh giới. Theo bản thân mình vương quốc được đánh giá là một trong những thư viện hỗ trợ cơ sở dữ liệu tốt và tối ưu cho dân lập trình trên các dòng di động hiện tại

14. 1. Bộ nhớ không đồng bộ

Bởi vì AsyncStorage chạy bất đồng bộ vì vậy mình chỉ sử dụng AsyncStorage để lưu một số cấu hình của ứng dụng ví dụ như dữ liệu người dùng hoặc mã ngôn ngữ. , những dữ liệu quan trọng và có cấu trúc thông thường của mình sẽ sử dụng cơ sở dữ liệu để lưu trữ, truy xuất nhanh và dễ dàng hơn

nhập thư viện AsyncStorage

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

class CustomText extends Component {
    constructor(props) {
        super(props);
    }

    render() {
        return (
            <Text>{this.props.message}</Text>   /*Sử dụng props được truyền từ ngoài vào.*/
        );
    }
}

export default class App extends Component {
    constructor(props) {
        super(props);
        this.state = {
            message: "Welcome to Code 101 - React-native"
        }
    }

    render() {
        return (
            <CustomText message={this.state.message} /> /*truyền 1 props vào cho thằng con sử dụng.*/
        );
    }
}
1

Sử dụng thư viện

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

class CustomText extends Component {
    constructor(props) {
        super(props);
    }

    render() {
        return (
            <Text>{this.props.message}</Text>   /*Sử dụng props được truyền từ ngoài vào.*/
        );
    }
}

export default class App extends Component {
    constructor(props) {
        super(props);
        this.state = {
            message: "Welcome to Code 101 - React-native"
        }
    }

    render() {
        return (
            <CustomText message={this.state.message} /> /*truyền 1 props vào cho thằng con sử dụng.*/
        );
    }
}
2

14. 2. cơ sở dữ liệu

Thông thường mình sẽ sử dụng vương quốc để lưu trữ các dữ liệu có cấu trúc. Mình xin demo nhỏ về một phần mềm quản lý, chỉnh sửa danh sách sinh viên

15. Đa ngôn ngữ

16. Giao tiếp với bản địa

17. Quy định tên biến và cấu trúc chương trình

Khi bạn thấy khá là khác các vấn đề về React-Native và code được một vài chương trình đơn giản thì cũng là lúc chúng ta nên xem lại các quy chuẩn thiết kế, cũng như quy chuẩn về tên biến để

  • Khi đọc lại bâng khuâng (trước mình code cái gì vậy)
  • Người khác đọc cho biết bạn đang làm gì?
  • Bạn có thể tham gia dự án khác để biết cách sửa đổi
  • Làm dự án cho nhiều người tham gia
  • ....

Mình xin dưa ra một số quy định cơ bản như sau

17. 1. variable name and function

  • Một vài quy định tên biến mà mình cần phải tuân thủ như

    • Biến tên phải bắt đầu bằng các ký tự viết thường
    • Biến tên không được bắt đầu bằng số hoặc ký tự đặc biệt
    • Những chữ cái đầu của mỗi từ đều viết hoa
    • Biến tên phải mang nghĩa rõ ràng
    • Nếu là phong cách thì nên viết thêm phần tắt của chế độ xem ở phía trước
  • Một vài ví dụ về tên biến

    • maxNumber
    • số tối thiểu
    • văn bảnTin nhắnTrả lời
    • btnActionĐồng ý
    • ....
  • Một vài quy định về tên hàm

    • Tên hàm cũng bắt đầu bằng ký tự viết thường
    • Tên hàm không chứa các ký tự đặc biệt
    • Những chữ cái đầu của mỗi từ đều viết hoa
    • Tên hàm phải mang ý nghĩa rõ ràng và có thể thực hiện được chức năng của hàm
  • One vài ví dụ về tên hàm

    • findMinOfTowNumber(firstNumber, secondNumeber){}
    • onPressBtnLanguage(){}
    • onPressNegativeAction(){}
    • ....

17. 2. Constructor program

Sau những dự án và tìm hiểu trên mạng. Mình đã đưa ra cấu hình cấu trúc thư mục dự án như sau

(hình ảnh/cấu trúc dự án. jpg)

Toàn bộ mã nguồn của chương trình sẽ được đặt trong thư mục ứng dụng

  • tài sản là thư mục chứa tài nguyên của mình bao gồm các tài nguyên như phông chữ tùy chỉnh (phông chữ), hình ảnh (hình ảnh), ngôn ngữ (ngôn ngữ)

  • configs là thư mục chứa cấu hình của ứng dụng. bao gồm cấu hình máy chủ, liên kết, màu sắc cơ bản

  • libs là thư mục chứa các thư viện cơ bản của mình để xử lý một số vấn đề nội bộ như

    • Cơ sở dữ liệu (xử lý lưu trữ dữ liệu bằng cơ sở dữ liệu)
    • Lưu trữ (xử lý lưu trữ dữ liệu bằng lưu trữ)
    • Ngôn ngữ (Cấu hình xử lý đa ngôn ngữ trong ứng dụng)
    • RESTClient (Cấu hình, danh sách các api truy cập máy chủ hệ thống)
    • SoundPlayer (Điều khiển âm thanh)
    • Inapp (Một vài cấu hình, xử lý thanh toán mua bán với cửa hàng)
    • Ads (Cấu hình hiển thị quảng cáo từ bên thứ 3)
    • .....
  • mô hình là thư mục chứa các mô hình do mình định nghĩa, có thể là định nghĩa các đối tượng hoặc các loại đối tượng