Sử dụng classnames và BEM để tạo className trong React (ok)
https://viblo.asia/p/su-dung-classnames-va-bem-de-tao-classname-trong-react-yMnKMM6rK7P?fbclid=IwAR2wjjmxd3IHDssB0DAQRPKh_w5GuH1oId6NNpUx8Jja6IhIQytY5Xgva_g
Last updated
Was this helpful?
https://viblo.asia/p/su-dung-classnames-va-bem-de-tao-classname-trong-react-yMnKMM6rK7P?fbclid=IwAR2wjjmxd3IHDssB0DAQRPKh_w5GuH1oId6NNpUx8Jja6IhIQytY5Xgva_g
Last updated
Was this helpful?
Cách sử dụng classnames
C:\Users\Administrator\Desktop\classnames\src\App.js
Nếu bạn là 1 ReactJS hay frontend developer thì Bem là 1 trong những rule đặt tên class mà bạn cần phải nắm. Theo mình thấy, hầu hết các dự án đều sử dụng bem không ít thì nhiều BEM (block, element, modifier) trong dự án đó. Việc sử dụng BEM giúp cho việc xác định vai trò của block/element trở nên dễ dàng hơn chỉ bằng việc đọc tên class.
Nhưng ở bài viết này mình không nói sâu về BEM vì nó có khá nhiều trên mạng rồi, bạn có thể đọc thêm về BEM trong bài viết: https://viblo.asia/p/tim-hieu-ve-bem-gioi-thieu-qzaGzNMzGyO
Trong Reactjs, việc đặt tên class khá đơn giản với từ khoá className:
Và khi đặt tên class động dựa vào tên biến:
Nhưng nếu có nhiều biến cần để tạo class thì sao:
Ta có reactElement như thế này:
Khá khó đọc và rối phải không. Vậy nên classnames dependence sinh ra để giải quyết việc này:
Việc đọc code trở nên sáng và dễ hiểu hơn khá nhiều rồi chứ. Nhưng bài viết này mình cũng không tìm hiểu nhiều về utility này. Thôi quay trở lại việc chính bài viết hôm nay mình muốn làm một ví dụ về việc tạo 1 utility để tạo BEM class cho component, bắt đầu nào.
Prerequire: Bạn đã tạo 1 project với create-react-app và cài đặt classnames dependence.
Ở folder src, ta tạo subfolder utils nơi lưu các hàm dùng chung. Tại đây, tạo file classnames.js
Hàm createBEM trả lại 1 object trong đó có có hàm create , hàm này nhận blockName làm đối số và trả lại 1 object khác với các key là b, e, m tương ứng với block, elemen, modifier trong BEM. Mỗi key này khi gọi đến sẽ trả lại 1 BEM class tương ứng. Sử dụng thử xem thế nào nhé:
Mình tạo component Content sử dụng utility bemnames vừa tạo ở trên:
Và trong file App.js chỉ đơn giản truyền vào className cũng như tham title cho Content component thôi.
Bạn có thể tuỳ biến hàm createBEM của mình để tạo ra cấu trúc BEM class của riêng mình nhé.
All Rights Reserved
Và đây là thành quả: