Khóa học react-native

Images trong React Native

0 phút đọc

Trong React Native, việc hiển thị hình ảnh là một phần quan trọng của việc xây dựng giao diện người dùng. Hình ảnh không chỉ giúp làm cho ứng dụng trở nên hấp dẫn hơn mà còn cung cấp thông tin trực quan cho người dùng. Trong bài viết này, chúng ta sẽ tìm hiểu chi tiết về cách làm việc với hình ảnh trong React Native, bao gồm các loại hình ảnh, cách sử dụng chúng, và các ví dụ cụ thể.

Giới Thiệu về Image Component

Image là một component trong React Native được sử dụng để hiển thị hình ảnh. Bạn có thể sử dụng nó để hiển thị hình ảnh từ nhiều nguồn khác nhau như hình ảnh cục bộ (local images), hình ảnh từ mạng (network images), và hình ảnh từ bộ nhớ tạm thời (temporary local images).

Cú Pháp Cơ Bản

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

const App = () => {
  return (
    <View style={styles.container}>
      <Image source={require("./assets/myImage.png")} style={styles.image} />
    </View>
  );
};

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

export default App;

Các Loại Hình Ảnh

Hình Ảnh Cục Bộ (Local Images)

Hình ảnh cục bộ là những hình ảnh được lưu trữ trong thư mục dự án của bạn. Để sử dụng hình ảnh cục bộ, bạn cần đặt hình ảnh vào thư mục dự án và sử dụng hàm require để tham chiếu đến hình ảnh đó.

Ví dụ:

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

const App = () => {
  return (
    <View style={styles.container}>
      <Image source={require("./assets/myImage.png")} style={styles.image} />
    </View>
  );
};

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

export default App;

Hình Ảnh Từ Mạng (Network Images)

Hình ảnh từ mạng là những hình ảnh được tải từ một URL. Khi sử dụng hình ảnh từ mạng, bạn cần chỉ định thuộc tính source với một đối tượng chứa URL của hình ảnh.

Ví dụ:

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

const App = () => {
  return (
    <View style={styles.container}>
      <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",
  },
  image: {
    width: 200,
    height: 200,
  },
});

export default App;

Hình Ảnh Từ Bộ Nhớ Tạm Thời (Temporary Local Images)

Hình ảnh từ bộ nhớ tạm thời là những hình ảnh được lưu trữ tạm thời trên thiết bị, chẳng hạn như hình ảnh từ camera roll hoặc hình ảnh được tải xuống từ mạng và lưu trữ tạm thời.

Ví dụ:

import React, { useState } from "react";
import { View, Image, Button, Platform } from "react-native";
import * as ImagePicker from "expo-image-picker";

const App = () => {
  const [image, setImage] = useState(null);

  const pickImage = async () => {
    let result = await ImagePicker.launchImageLibraryAsync({
      mediaTypes: ImagePicker.MediaTypeOptions.All,
      allowsEditing: true,
      aspect: [4, 3],
      quality: 1,
    });

    if (!result.cancelled) {
      setImage(result.uri);
    }
  };

  return (
    <View style={{ flex: 1, alignItems: "center", justifyContent: "center" }}>
      <Button title="Pick an image from camera roll" onPress={pickImage} />
      {image && (
        <Image source={{ uri: image }} style={{ width: 200, height: 200 }} />
      )}
    </View>
  );
};

export default App;

Các Thuộc Tính Quan Trọng của Image Component

source

Thuộc tính source xác định nguồn của hình ảnh. Nó có thể là một đối tượng chứa đường dẫn đến hình ảnh cục bộ hoặc một URL của hình ảnh từ mạng.

Ví dụ:

<Image source={require('./assets/myImage.png')} style={styles.image} />
<Image source={{ uri: 'https://reactnative.dev/img/tiny_logo.png' }} style={styles.image} />

style

Thuộc tính style cho phép bạn áp dụng các kiểu dáng cho hình ảnh, chẳng hạn như kích thước, lề, đệm, và nhiều hơn nữa.

Ví dụ:

<Image
  source={require("./assets/myImage.png")}
  style={{ width: 100, height: 100, borderRadius: 50 }}
/>

resizeMode

Thuộc tính resizeMode xác định cách hình ảnh được điều chỉnh khi kích thước của nó không phù hợp với kích thước của khung chứa. Các giá trị có thể bao gồm cover, contain, stretch, repeat, và center.

Ví dụ:

<Image
  source={require("./assets/myImage.png")}
  style={styles.image}
  resizeMode="cover"
/>

defaultSource

Thuộc tính defaultSource cho phép bạn chỉ định một hình ảnh mặc định sẽ được hiển thị trong khi hình ảnh từ mạng đang tải.

Ví dụ:

<Image
  source={{ uri: "https://reactnative.dev/img/tiny_logo.png" }}
  style={styles.image}
  defaultSource={require("./assets/placeholder.png")}
/>

Các Kỹ Thuật Tối Ưu Hóa Hình Ảnh

Prefetching

Prefetching là kỹ thuật tải trước hình ảnh để cải thiện hiệu suất và trải nghiệm người dùng. React Native cung cấp phương thức Image.prefetch để tải trước hình ảnh.

Ví dụ:

import React, { useEffect } from "react";
import { Image, View, StyleSheet } from "react-native";

const App = () => {
  useEffect(() => {
    Image.prefetch("https://reactnative.dev/img/tiny_logo.png");
  }, []);

  return (
    <View style={styles.container}>
      <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",
  },
  image: {
    width: 200,
    height: 200,
  },
});

export default App;

Caching

Caching là kỹ thuật lưu trữ hình ảnh đã tải xuống để sử dụng lại sau này, giúp giảm thiểu việc tải lại hình ảnh từ mạng và cải thiện hiệu suất.

Ví dụ:

import React, { useState, useEffect } from "react";
import { Image, View, StyleSheet, ActivityIndicator } from "react-native";
import FastImage from "react-native-fast-image";

const App = () => {
  const [imageUri, setImageUri] = useState(null);

  useEffect(() => {
    const fetchImage = async () => {
      const uri = "https://reactnative.dev/img/tiny_logo.png";
      const cachedImage = await FastImage.preload([{ uri }]);
      setImageUri(uri);
    };

    fetchImage();
  }, []);

  return (
    <View style={styles.container}>
      {imageUri ? (
        <FastImage
          style={styles.image}
          source={{ uri: imageUri }}
          resizeMode={FastImage.resizeMode.contain}
        />
      ) : (
        <ActivityIndicator size="large" color="#0000ff" />
      )}
    </View>
  );
};

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

export default App;

Các Hạn Chế của Image Component

Mặc dù Image component trong React Native rất mạnh mẽ, nhưng nó cũng có một số hạn chế:

  1. Hạn chế về xử lý hình ảnh: Image component chỉ cung cấp các tính năng xử lý hình ảnh cơ bản như thay đổi kích thước và cắt xén, nhưng thiếu các tính năng chỉnh sửa hình ảnh nâng cao như điều chỉnh màu sắc, bộ lọc, và hiệu ứng hình ảnh.
  2. Hỗ trợ định dạng hạn chế: Image component chỉ hỗ trợ một số định dạng hình ảnh như PNG, JPEG, và GIF. Nó không hỗ trợ định dạng SVG, điều này có thể là một hạn chế cho một số trường hợp sử dụng.
  3. Yêu cầu mạng: Image component yêu cầu một yêu cầu mạng để tải hình ảnh từ mạng, điều này có thể là một vấn đề khi kết nối mạng kém hoặc chậm, dẫn đến thời gian tải lâu hoặc hình ảnh không tải được.
  4. Giới hạn kích thước: Image component có giới hạn kích thước hình ảnh tối đa là 2 MB cho iOS và Android, và vượt quá giới hạn này sẽ khiến hình ảnh không tải được.
  5. Quản lý bộ nhớ: Image component không có các tính năng quản lý bộ nhớ nâng cao như caching tự động hoặc dọn dẹp bộ nhớ, điều này có thể dẫn đến các vấn đề về hiệu suất trong một số trường hợp.

Kết Luận

Image component trong React Native là một công cụ mạnh mẽ và linh hoạt để hiển thị hình ảnh trong ứng dụng di động. Bằng cách hiểu rõ các thuộc tính và phương pháp tối ưu hóa, bạn có thể tạo ra các giao diện người dùng hấp dẫn và hiệu quả. Hy vọng qua bài viết này, bạn đã có thể nắm bắt được cách sử dụng Image component trong React Native và áp dụng vào các dự án của mình.

Avatar
Được viết bởi

TechMely Team

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

Gợi ý bài viết

Bình luận

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

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

Khoá học javascript từ cơ bản đến chuyên sâuYoutube Techmely