- vừa được xem lúc

Bắt đầu với React‑Grid‑Layout

0 0 1

Người đăng: Gung Typical

Theo Viblo Asia

React‑Grid‑Layout là hệ thống lưới mạnh mẽ giúp bạn tạo bố cục (layout) responsive một cách dễ dàng. Trong Bookmark Dashboard, component Dashboard sử dụng React‑Grid‑Layout – thư viện hỗ trợ kéo‑thả và thay đổi kích thước (resize) “tận răng”, nên việc tích hợp gần như không tốn công.

Dưới đây là hướng dẫn nhanh cách sử dụng React‑Grid‑Layout – “động cơ” phía sau bố cục linh hoạt của Bookmark Dashboard.

Cài đặt

Cài qua npm hoặc yarn:

npm install react-grid-layout yarn add react-grid-layout

Ví dụ cơ bản

import React, { useState, useCallback } from 'react';
import { Responsive, WidthProvider } from 'react-grid-layout';
import GridItem from './GridItem'; import 'react-grid-layout/css/styles.css';
import 'react-resizable/css/styles.css'; // dependency of react-grid-layout const ResponsiveGridLayout = WidthProvider(Responsive); function MyDashboard() { const [layout, updateLayout] = useState([]); const handleDragAndResize = useCallback((layout, oldItem, newItem) => { updateLayout(layout) }, []); return ( <ResponsiveGridLayout breakpoints={{ md: 960, sm: 720 }} cols={{ md: 12, sm: 12 }} rowHeight={40} layouts={layout} onDragStop={handleDragAndResize} onResizeStop={handleDragAndResize} > {layout.map((item) => ( <div key={item.i}> <GridItem item={item} /> </div> ))} </ResponsiveGridLayout> )
}

Trong đó:

  • ResponsiveGridLayout là hệ thống lưới hoàn chỉnh, tự thích ứng với kích thước container và hỗ trợ breakpoints.
  • Dựa trên breakpoint, chiều rộng container được chia thành cols cột.

Đơn vị lưới (grid unit)

Mỗi ô trong lưới được đo bằng grid unit:

  • unitWidth = width container / số cột
  • unitHeight = rowHeight

Từ đó:

  • Chiều rộng thực của item = unitWidth × w
  • Chiều cao thực của item = unitHeight × h

Cấu trúc dữ liệu layout

// layout
[ { "i": "3184", "w": 4, "h": 3, "x": 0, "y": 4, "moved": false, "static": false }, { "i": "3232", "w": 8, "h": 4, "x": 0, "y": 0, "moved": false, "static": false }, { "i": "3216", "w": 4, "h": 9, "x": 8, "y": 0, "moved": false, "static": false }, { "i": "3196", "w": 4, "h": 5, "x": 4, "y": 4, "moved": false, "static": false }
]

Trong đó:

  • i : ID của item
  • w, h: kích thước (đơn vị lưới)
  • x, y: toạ độ góc trên‑trái (đơn vị lưới)

Khi kéo‑thả hoặc resize, callback onDragStop / onResizeStop trả về layout mới; chỉ cần cập nhật state layout là toàn bộ lưới được render lại.

GridItem là component tùy chỉnh hiển thị nội dung. Trong demo, nó render danh sách bookmark, nhưng bạn có thể đặt bất cứ thứ gì.

Kết luận

React‑Grid‑Layout vừa thân thiện vừa mạnh mẽ. Trải nghiệm dev rất “nuột”: repo GitHub có tài liệu chi tiết kèm live demo. Rất đáng thử cho bất kỳ ai cần layout kéo‑thả, responsive.

Cảm ơn các bạn đã theo dõi!

Bình luận

Bài viết tương tự

- vừa được xem lúc

Tìm hiểu về Redux Thunk

Chào mọi người, nếu bạn là người đã biết về React và đang làm quen với Redux chắc hẳn bạn đang rất mơ hồ về các khái niệm cơ bản của Redux như dispatch, store, action creator,... bạn còn đang vật lộn với đống document của Redux để hiểu những khái niệm đó và bạn nghe ai đó trong team nói về Redux Thu

0 0 408

- vừa được xem lúc

[React] Giới thiệu tổng quát về Redux Toolkit

1. Redux Toolkit (RTK) là gì và tại sao lại có nó. . .

0 0 6.7k

- vừa được xem lúc

Uống Pepsi code Vue đi - Uống Cocacola code React nha ;)

. (Nguồn ảnh: Internet). Chào các bạn, chào các bạn. Let's go . 1.

0 0 155

- vừa được xem lúc

Cài đặt taillwind css cho dự án React

Trong bài viết cùng mình tìm hiểu cách cài đặt tailwind css cho một dự án React sẵn có. .

0 0 155

- vừa được xem lúc

Formik vs React Hook Form (Phần 1)

Các lập trình viên Front End đều làm việc rất nhiều với form cùng sự phức tạp của ứng dụng. Do vậy chúng ta cần những thư viện form mạnh mẽ hỗ trợ quản lý các form state, form validation... Thành phần module. Formik bao gồm có 9 dependencies khác. . React Hook Form thì không có.

0 0 379

- vừa được xem lúc

Hướng dẫn React Redux cho người mới bắt đầu - Phần 1

Lời mởi đầu. Chào các bạn, ở thời điểm thực hiện bài viết này mình cũng là một người đang bắt đầu tìm hiểu và học với ReactJs và Redux, trong quá trình tìm hiểu đọc các tài liệu về thư viện này mình có tìm được một bài hướng dẫn khá hay nên đã quyết định chia sẻ với mọi người .

0 0 291