Viết lại styled-components trong ReactJS với 60 dòng code

Tram Ho

#alt text

Tản mạn

styled-components là thư viện mình rất thích khi viết css cho react, sau vài ngày gần đây mình tìm hiểu về source của nó thì mình đã quyết định viết lại nó để hiểu sâu nhất có thể, mình cảm thấy học được rất repo này nên mình đã viết ra bài nên đã chia sẻ cho ae những thứ mình đã học được từ nó, để hiểu được những đoạn code trong repo của mình thì mình sẽ nói 2 khái niệm khá mới với mình và bắt buộc phải hiểu, nếu ae đã biết rồi thì có thể bỏ qua ^^

Stylesheet

Nếu ae nào biết đến stylesheet trong javascript rồi thì có thể bỏ qua đoạn này
Trong styled-components thì nó đc dùng để lưu các style, mỗi thẻ tag style thì có 1 sheet, mỗi sheet có rất nhiều rule , 1 rule tương ứng với className và style kèm theo, vd ở dưới minh hoạ cho việc thêm 1 rule vào sheet

Link chi tiết về nó : https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleSheet

##Tagged templates
Tagged templates mình nói đến ở đây chính là cú pháp hay dùng ở styled-components

Kết qủa chúng ta lấy ra đc các tham số như thế này
alt text
Link chi tiết về nó : https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals

##Bắt tay vào viết thư viện
Mình sẽ viết class ComponentStyle để handle việc khởi tạo stylesheet và insert css cho component

Phần code trong file core.js chắc là cũng là phần lằng nhằng nhất, mình nghĩ đê ae hiểu nhất về đoạn code của mình thì nên clone repo này của mình rồi chạy nó rồi vào đây đọc thì sẽ dễ hiểu hơn rất nhiều

Cuối cùng là code trong file index.js, chính là file mà ae sao này sẽ import nó mỗi khi dùng styled-components

Và okay rồi, ae có thể import styled-componets fake của mình vào để xài như một thư viện thật =))))
alt text
Mọi có thể vào thẳng link sandbox để xem và code demo luôn
https://codesandbox.io/embed/github/ducga1998/rewrite-styled-components/tree/master/?fontsize=14&hidenavigation=1&theme=dark

Kết

Hi vọng mọi người sẽ thấy thú vị qua bài viết của mình, xin cảm ơn ae đã đọc đến tận đây ạ : ))
Repo : https://github.com/ducga1998/rewrite-styled-components
Mọi thắc mắc và đóng góp ý kiến các bạn có thể gửi vào gmail : [email protected] cho mình để tiện trao đổi

Chia sẻ bài viết ngay

Nguồn bài viết : Viblo