Chuyển đổi các thành phần được tạo kiểu thành css

- Được rồi, chúng ta biết cú pháp cơ bản để xác định và sử dụng các thành phần được tạo kiểu, vì vậy bây giờ là lúc chuyển đổi tất cả kiểu dáng trong ứng dụng của chúng ta, cụ thể là trong các mô-đun CSS của chúng ta sang các thành phần được tạo kiểu. Bây giờ, đây rõ ràng là một nhiệm vụ hơi tẻ nhạt, vì vậy có thể mất một chút thời gian, nhưng hãy kiên nhẫn với tôi ở đây trong khi tôi chuyển đổi từng thành phần của chúng ta thành một thành phần theo kiểu. Vì vậy, quá trình này là khá đơn giản. Chúng tôi sẽ mở từng mô-đun CSS của mình tại đây và đối với mỗi kiểu dáng mà chúng tôi đã xác định, chúng tôi sẽ tạo một thành phần được tạo kiểu cho nó và thay thế thành phần đó bên trong thành phần tương ứng. Vì vậy, chúng tôi sẽ bắt đầu với danh sách việc cần làm của chúng tôi ở đây. Chúng ta sẽ bắt đầu với todolist. css và cái này khá đơn giản vì nó chỉ chứa một kiểu ở đây. Vì vậy, những gì chúng ta sẽ làm chỉ đơn giản là sao chép và dán hai phong cách này vào đây, sau đó vào todolist và đảm bảo rằng…

Thực hành trong khi bạn học với các tập tin bài tập

Tải xuống các tệp mà người hướng dẫn sử dụng để dạy khóa học. Theo dõi và học hỏi bằng cách xem, nghe và thực hành

Tải xuống các khóa học và học mọi lúc, mọi nơi

Xem các khóa học trên thiết bị di động của bạn mà không cần kết nối internet. Tải xuống các khóa học bằng ứng dụng LinkedIn Learning trên iOS hoặc Android của bạn

Tôi dày công nghiên cứu các hệ thống tạo kiểu javascript và tôi đã nhận thấy điều gì đó trong quá trình thử các công cụ khác nhau. Với tư cách là một nhóm, chúng tôi đã thực sự hiểu rõ về




{'Home'}


{'About'}




{loggedIn ? username : 'Login/Register'}


5 khi tách logic nghiệp vụ khỏi chế độ xem và giảm độ phức tạp, việc quyết định nơi lưu tệp thành phần hoặc đặt tên cho nó thật đơn giản

Nhưng vì CSS (hoặc SCSS/LESS/etc) không hiển thị ngay lập tức từ bên trong thành phần React, thiết kế phải chạy trên một “luồng tinh thần” khác

Tất cả những ai đã từng dành thời gian viết CSS đều biết rằng đây là một vấn đề tầm thường trong các ứng dụng nhỏ, nhưng nếu không có sự thực thi mạnh mẽ của phương pháp CSS (BEM/SMACSS/v.v.), các biểu định kiểu sẽ tự nhiên trở nên khó đoán

Khi một ứng dụng mở rộng quy mô, việc xác định kiểu cần phải diễn ra bên trong phạm vi, giúp dễ dàng đưa ra tính đặc hiệu, điều này khiến bạn khó thêm kiểu mới hoặc cập nhật bất kỳ thứ gì hiện có mà không thêm vào tính đặc hiệu để tránh ảnh hưởng đến kiểu của một số ứng dụng. . Các kỹ sư nên xác định hiện tượng này là bình thường, vì tôi mới chỉ thấy một hoặc hai hệ thống kiểu dáng quy mô lớn thực sự đẹp. Cả hai đều là SCSS và cả hai đều ủng hộ việc hạn chế tính đặc hiệu và thúc đẩy khả năng sử dụng lại. Mọi hệ thống phong cách khác mà tôi từng thấy đều là một mớ hỗn độn và đó là bởi vì đó CHỈ LÀ CÁCH CSS LÀ

Điều làm cho việc chuyển đổi (hoặc bất kỳ) hệ thống CSS truyền thống nào của chúng tôi thành




{'Home'}


{'About'}




{loggedIn ? username : 'Login/Register'}


6 trở nên khó khăn chính là điều khiến CSS xếp tầng.



{'Home'}


{'About'}




{loggedIn ? username : 'Login/Register'}


7. Điều gì xảy ra với các phần tử khác nếu tôi thay đổi phần đệm ở đây?

Tấn công các khối

Tôi đã xem xét hệ thống “khối” — nơi các thành phần được chia nhỏ thành. Một




{'Home'}


{'About'}




{loggedIn ? username : 'Login/Register'}


8 với



{'Home'}


{'About'}




{loggedIn ? username : 'Login/Register'}


9 hiển thị nội dung bằng cách sử dụng



{'Home'}


{'About'}




{loggedIn ? username : 'Login/Register'}


0

// Block
// Element
// Element <-- modifier_A, modifier_B
// Element <-- modifier_C
const Block = styled.div``
const Element = styled.div`
font-size: ${props => { return props.size | '16px' }};
color: ${props => { return props.color | 'rebeccapurple' }};
`




{modifier_C}

Đây không phải là một khái niệm mới đối với các Thành phần JS (CSS có phương pháp tương tự), nhưng nó mang ý nghĩa mới khi được coi là một cấu trúc để tổ chức thiết kế được sử dụng lại trực tiếp bên trong javascript. Ý tưởng này phù hợp với việc nói chung là




{'Home'}


{'About'}




{loggedIn ? username : 'Login/Register'}


0 vì không bao giờ nên hiểu rõ tại sao một phần tử lại trông như vậy. Nó cũng cho phép các nhà phát triển chuyển đổi mọi thứ một cách nhanh chóng, vì không còn lo sợ về các tác dụng phụ chưa biết nữa. Thật dễ dàng để theo dõi những gì nhỏ giọt ở đâu. Một điều khác làm cho css trong js trở thành một giải pháp hấp dẫn là logic có sẵn trong javascript không có trong CSS hoặc bất kỳ tiện ích mở rộng nào của nó. Kể từ lần đầu tiên tôi bắt đầu viết CSS, tôi đã nghĩ “giá như tôi có thể kiểm tra nội dung của div này”, và đã đi sâu vào lỗ hổng để viết jquery cập nhật kiểu dựa trên các điều kiện

Lưới là thứ đầu tiên phải được chuyển đổi

Từ những gì tôi đang thấy, chúng tôi đang phải đối mặt với vấn đề về phong cách toàn cầu (chủ yếu là với bootstrap). Xóa tất cả các định nghĩa về kiểu nhưng để nguyên bootstrap và chúng tôi còn lại một ứng dụng chưa được tạo kiểu vẫn có




{'Home'}


{'About'}




{loggedIn ? username : 'Login/Register'}


1 của nó

Câu hỏi chính của tôi là liệu chúng ta nên sử dụng gói lưới hay tự viết. Việc viết của riêng chúng tôi sẽ tương đối đơn giản, nhưng các lưới dựng sẵn đã trải qua khó khăn (đáng kể) để tìm ra các hệ thống điểm dừng và các biến thể, v.v.

Các thành phần có thể sẽ cần phải được cấu trúc lại hoàn toàn

Có những trường hợp không thể tránh khỏi khi thành phần




{'Home'}


{'About'}




{loggedIn ? username : 'Login/Register'}


2 và



{'Home'}


{'About'}




{loggedIn ? username : 'Login/Register'}


3 nằm trong các tệp khác nhau ở các phần khác nhau của cây tệp, có cấu trúc DOM giống hệt nhau, nhưng có định nghĩa kiểu của



{'Home'}


{'About'}




{loggedIn ? username : 'Login/Register'}


4

Trên hết,




{'Home'}


{'About'}




{loggedIn ? username : 'Login/Register'}


5 và



{'Home'}


{'About'}




{loggedIn ? username : 'Login/Register'}


6 có thể là cả hai phiên bản của



{'Home'}


{'About'}




{loggedIn ? username : 'Login/Register'}


7 đã được nhập từ Bootstrap. Nó không phải là một nhiệm vụ tầm thường để xóa một ứng dụng lớn, tìm và kiểm tra từng trường hợp nút, theo dõi các định nghĩa kiểu giả mạo choEach và đó chỉ là xem phần tử ví dụ đơn giản nhất có thể

Nó đáng giá, mặc dù

Đây là một ví dụ về lý do tại sao việc xác định kiểu bên trong javascript lại tốt hơn CSS. Lấy ví dụ mã giả này của NavBar




{'Home'}


{'About'}




{loggedIn ? username : 'Login/Register'}


Nếu bạn cần biết chính xác quy tắc kiểu dáng nào đang được áp dụng cho bất kỳ phần tử




{'Home'}


{'About'}




{loggedIn ? username : 'Login/Register'}


8 cụ thể nào — chỉ cần tìm định nghĩa của nó, chúng sẽ ở đó hoặc ít nhất sẽ ở gần đó

Cập nhật

Đọc các bài báo và cân nhắc ưu và nhược điểm, tôi cứ bị mắc kẹt trong sự nhầm lẫn giữa việc sử dụng các lớp kiểu nguyên tử với kiểu dáng ở cấp độ thành phần với việc nhập các gói trợ giúp với việc chỉ tái cấu trúc sass…

Phạm vi lựa chọn và thiếu tiêu chuẩn ngành khiến việc phân tích cú pháp các tùy chọn trở nên khó khăn, đặc biệt là khi tiêu chuẩn ngành (css thông thường) quá tệ. Tâm trí tôi cứ quay trở lại với “chỉ viết hệ thống của riêng bạn”, cho đến khi các vấn đề như truy vấn phương tiện xuất hiện khi tâm trí tôi nói “hãy nhìn xem, đừng phát minh lại bánh xe, chỉ cần sử dụng gói ai đó đã viết. Nó hoạt động tốt. ”

Tôi luôn ngưỡng mộ khái niệm Tachyons, bởi vì nó cực kỳ đơn giản và có thể giảm một tệp nhập




{'Home'}


{'About'}




{loggedIn ? username : 'Login/Register'}


9 duy nhất xuống một tệp css nhỏ chỉ xử lý các trường hợp bên lề kỳ lạ




{'Home'}


{'About'}




{loggedIn ? username : 'Login/Register'}


2

Nhưng nó không giải quyết được vấn đề thành phần hóa, nó chỉ là một bản sửa lại css và nó làm cho phần đánh dấu trở nên thực sự xấu xí

Tuy nhiên, có thể kết hợp các triết lý và có khả năng tìm thấy một nền tảng trung gian khả thi. (tham khảo https. //liên kết. Trung bình. com/j7ErYuuE3R)

Tái tạo kiểu dáng cho một thành phần có thể trở nên trầm trọng hơn khi nó chỉ cần các đạo cụ bố cục hơi khác một chút. Một giải pháp là rất rõ ràng bên trong định nghĩa thành phần được tạo kiểu tính toán cho các trường hợp bên lề phát sinh (khi Span cần có màu đỏ ifError)

Nhưng khi một Span duy nhất thực sự rất cần lề phải là 10px, việc cập nhật định nghĩa theo kiểu sẽ cảm thấy nặng nề và tăng thêm độ phức tạp đáng kể

Giải pháp được ghi lại ở đây rất hấp dẫn và khả thi. https. // liên kết. Trung bình. com/j7ErYuuE3R

Tác giả đề nghị kết hợp một thư viện tiện ích css className (tachyons trong trường hợp này) với các thành phần theo kiểu

Hai đoạn mã sau có thể được kết hợp để tạo ra một hệ thống rất mạnh mẽ, trong đó phần tử có thể được xác định dễ dàng bằng cách sử dụng một bộ kiểu mặc định, sau đó được cập nhật nhanh chóng bằng thư viện tiện ích khi Span cần




{'Home'}


{'About'}




{loggedIn ? username : 'Login/Register'}


20 (lề trái, phần đệm,




{'Home'}


{'About'}




{loggedIn ? username : 'Login/Register'}


4

Có một giải pháp hiện có thanh lịch, giảm độ phức tạp, có thể mở rộng và dễ học. Tôi chỉ cần tìm ra nó là gì