Khóa học react-native

Props trong React Native

0 phút đọc

Props (viết tắt của "properties") là một khái niệm quan trọng trong React Native, cho phép các component giao tiếp với nhau bằng cách truyền dữ liệu từ component cha xuống component con. Props giúp tạo ra các component có thể tái sử dụng và tùy chỉnh, làm cho việc phát triển ứng dụng trở nên linh hoạt và hiệu quả hơn. Trong bài viết này, chúng ta sẽ tìm hiểu chi tiết về props trong React Native, cách sử dụng chúng, và các ví dụ cụ thể để minh họa.

Giới Thiệu về Props

Props là các thuộc tính được truyền từ component cha xuống component con. Chúng tương tự như các tham số của hàm trong JavaScript, cho phép bạn truyền dữ liệu và các hàm callback giữa các component. Props là immutable, nghĩa là chúng không thể thay đổi sau khi được truyền vào component.

Khái Niệm Cơ Bản

  • Props: Là các thuộc tính được truyền từ component cha xuống component con. Chúng là immutable và chỉ có thể đọc, không thể thay đổi.
  • State: Là dữ liệu nội bộ của component, có thể thay đổi và được quản lý bởi chính component đó.

Tạo và Sử Dụng Props

Sử Dụng Props trong Functional Component

Functional component là các hàm JavaScript đơn giản nhận vào một đối tượng props và trả về các phần tử React. Bạn có thể truy cập các props bằng cách sử dụng cú pháp destructuring.

Ví dụ:

javascript Copy
import React from "react";
import { View, Text, StyleSheet } from "react-native";

const Greeting = ({ name }) => {
  return (
    <View style={styles.container}>
      <Text style={styles.text}>Hello, {name}!</Text>
    </View>
  );
};

const styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: "center",
    alignItems: "center",
  },
  text: {
    fontSize: 20,
  },
});

export default Greeting;

Trong ví dụ trên, component Greeting nhận vào một prop name và hiển thị nó trong một thành phần Text.

Sử Dụng Props trong Class Component

Class component là các lớp JavaScript mở rộng từ React.Component. Bạn có thể truy cập các props bằng cách sử dụng this.props.

Ví dụ:

javascript Copy
import React, { Component } from "react";
import { View, Text, StyleSheet } from "react-native";

class Greeting extends Component {
  render() {
    return (
      <View style={styles.container}>
        <Text style={styles.text}>Hello, {this.props.name}!</Text>
      </View>
    );
  }
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: "center",
    alignItems: "center",
  },
  text: {
    fontSize: 20,
  },
});

export default Greeting;

Trong ví dụ này, component Greeting nhận vào một prop name và hiển thị nó trong một thành phần Text bằng cách sử dụng this.props.name.

Truyền Props giữa Các Component

Props cho phép bạn truyền dữ liệu từ component cha xuống component con, giúp tạo ra các component có thể tái sử dụng và tùy chỉnh.

Ví dụ:

javascript Copy
import React from "react";
import { View, Text, StyleSheet } from "react-native";
import Greeting from "./Greeting";

const App = () => {
  return (
    <View style={styles.container}>
      <Greeting name="Alice" />
      <Greeting name="Bob" />
      <Greeting name="Charlie" />
    </View>
  );
};

const styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: "center",
    alignItems: "center",
  },
});

export default App;

Trong ví dụ trên, component App truyền các prop name khác nhau cho component Greeting, tạo ra ba lời chào khác nhau.

Sử Dụng PropTypes để Xác Thực Props

PropTypes là một thư viện giúp xác thực các props được truyền vào component, giúp ngăn chặn các lỗi do truyền sai loại dữ liệu.

Cài Đặt PropTypes:

bash Copy
npm install prop-types

Sử Dụng PropTypes:

javascript Copy
import React from "react";
import PropTypes from "prop-types";
import { View, Text, StyleSheet } from "react-native";

const Greeting = ({ name }) => {
  return (
    <View style={styles.container}>
      <Text style={styles.text}>Hello, {name}!</Text>
    </View>
  );
};

Greeting.propTypes = {
  name: PropTypes.string.isRequired,
};

const styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: "center",
    alignItems: "center",
  },
  text: {
    fontSize: 20,
  },
});

export default Greeting;

Trong ví dụ này, chúng ta sử dụng PropTypes để xác thực rằng prop name phải là một chuỗi và là bắt buộc.

Sử Dụng Default Props

Default props cho phép bạn định nghĩa các giá trị mặc định cho props trong trường hợp chúng không được truyền vào.

Ví dụ:

javascript Copy
import React from "react";
import PropTypes from "prop-types";
import { View, Text, StyleSheet } from "react-native";

const Greeting = ({ name }) => {
  return (
    <View style={styles.container}>
      <Text style={styles.text}>Hello, {name}!</Text>
    </View>
  );
};

Greeting.defaultProps = {
  name: "Guest",
};

Greeting.propTypes = {
  name: PropTypes.string,
};

const styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: "center",
    alignItems: "center",
  },
  text: {
    fontSize: 20,
  },
});

export default Greeting;

Trong ví dụ này, nếu prop name không được truyền vào, giá trị mặc định "Guest" sẽ được sử dụng.

Truyền Hàm qua Props

Bạn có thể truyền các hàm callback qua props để xử lý các sự kiện trong component con.

Ví dụ:

javascript Copy
import React from "react";
import { View, Text, Button, StyleSheet } from "react-native";

const Counter = ({ count, onIncrement }) => {
  return (
    <View style={styles.container}>
      <Text style={styles.text}>Count: {count}</Text>
      <Button title="Increment" onPress={onIncrement} />
    </View>
  );
};

const App = () => {
  const [count, setCount] = React.useState(0);

  const handleIncrement = () => {
    setCount(count + 1);
  };

  return (
    <View style={styles.container}>
      <Counter count={count} onIncrement={handleIncrement} />
    </View>
  );
};

const styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: "center",
    alignItems: "center",
  },
  text: {
    fontSize: 20,
  },
});

export default App;

Trong ví dụ này, component App truyền hàm handleIncrement qua prop onIncrement cho component Counter. Khi người dùng nhấn nút "Increment", hàm handleIncrement sẽ được gọi để cập nhật state count.

Sử Dụng Props với Các Component Mặc Định

React Native cung cấp nhiều component mặc định như Text, View, Image, và Button, tất cả đều có thể được tùy chỉnh bằng cách sử dụng props.

Ví dụ:

javascript Copy
import React from "react";
import { View, Text, Image, StyleSheet } from "react-native";

const App = () => {
  return (
    <View style={styles.container}>
      <Text style={styles.text}>Hello, World!</Text>
      <Image
        source={{ uri: "https://reactnative.dev/img/tiny_logo.png" }}
        style={styles.image}
      />
    </View>
  );
};

const styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: "center",
    alignItems: "center",
  },
  text: {
    fontSize: 20,
  },
  image: {
    width: 50,
    height: 50,
  },
});

export default App;

Trong ví dụ này, chúng ta sử dụng các props sourcestyle để tùy chỉnh component Image.

Kết Luận

Props là một phần quan trọng trong React Native, giúp các component giao tiếp với nhau và tạo ra các giao diện người dùng linh hoạt và có thể tái sử dụng. Bằng cách hiểu rõ cách sử dụng props, bạn có thể xây dựng các ứng dụng React Native mạnh mẽ và dễ bảo trì. Hy vọng qua bài viết này, bạn đã có thể nắm bắt được cách sử dụng props trong React Native và áp dụng vào các dự án của mình.

Avatar
Được viết bởi

Admin Team

Gợi ý câu hỏi phỏng vấn

Không có dữ liệu

Không có dữ liệu

Gợi ý bài viết
Không có dữ liệu

Không có dữ liệu

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào