Ứng dụng Emoji search ReactJS – Recoil

Tram Ho

Giới thiệu

Đầu tiên thì ứng dụng emoji search là một trong các ví dụ cơ bản của reactjs, bạn có thể xem ở đây
https://github.com/ahfarmer/emoji-search

Bài viết này mình đã viết lại ứng dụng này, cùng với áp dụng Recoiljs trong việc quản lý state

Ứng dụng Emoji Search

Đầu tiên để quản lý state với Recoil, mình sẽ phải tạo các atoms

src/Atoms/searchInput.js

src/Atoms/emojiList.js

Ứng dụng này mình chỉ cần 2 atoms cơ bản, searchInput dùng khi tìm kiếm emoji, emojiList để lưu data. Với emojiList mình muốn dùng hàm atomFamily, nhưng không hiểu sao lại không dùng được

Sau khi có atom, bạn có thể dùng selector để “chế biến” ra dữ liệu mình cần.

src/Selectors/filteredEmojiList.js

src/common.js

Giờ mình chỉ cần render dữ liệu ra UI nữa thôi.

src/App.js

RecoilRoot sẽ tạo một context để chúng ta có thể sử dụng các hàm khác của Recoil. Bạn nên đặt nó bao ngoài App. React.Suspense đây là một tính năng vẫn đang phát triển của React, nhưng khi bạn sử dụng Recoil thì nó sẽ yêu cầu bạn sử dụng tính năng này, khi mà bạn fetch dữ liệu có thể hiển thị ra component thay thế.

Bên dưới là component Emoji, để dễ theo dõi, nên mình viết cả các components khác trong cùng một file này.

src/Components/Emoji.js

Các bạn có thể thấy các hooks của Recoil: useRecoilValueuseRecoilState. Đây đều là các hooks cơ bản, bạn có thể tham khảo thêm tại đây.

https://recoiljs.org/docs/api-reference/core/useRecoilState

Kết quả

Bạn có thể xem bản demo và mã hoàn chỉnh của ứng dụng ở đây:
https://codesandbox.io/s/admiring-albattani-wm1f9

Mình khá là thích thư viện này vì việc dễ dàng chia sẻ state, cú pháp cũng rất ngắn gọn dễ hiểu.
Có thể mình sẽ sử dụng nó từ giờ để thay thế cho việc sử dụng React Context.

Chia sẻ bài viết ngay

Nguồn bài viết : Viblo