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

Nâng cấp cách viết logic trong code React của bạn khi check điều kiện ???

0 0 216

Người đăng: Bui Hoang Ky

Theo Viblo Asia

Hello anh em , lại là mình đây ???

Good conditionals là một phần thiết yếu của bất kỳ ứng dụng React nào. Chúng ta thường sử dụng các điều kiện để hiển thị hoặc ẩn các elements hoặc các components trong code.

Chính vì vậy , chúng ta cần phải viết các điều kiện này một cách dễ hiểu, ngắn gọn, rõ ràng và tối ưu nhất, cùng mình điểm qua một số ví dụ nhé :

1. Sử dụng if là chủ yếu và không cần phải sử dụng else hay else-if.

Hãy bắt đầu với trường hợp cơ bản nhất mà chúng ta hay gặp. Nếu có dữ liệu, chúng ta hiển thị nó ra và ngược lại, chúng ta sẽ không hiển thị gì cả.

Đơn giản đúng không ? vậy thì mọi người thử nghĩ xem chúng ta sẽ viết đoạn code đó như thế nào ?

Giả sử chúng ta có một mảng các bài posts được trả về API. Khi đang fetching dât thì posts của chúng ta sẽ có giá trị là undefined.

Chúng ta có thể kiểm tra giá trị đó bằng câu lệnh if đơn giản :

export default function App() { const { posts } = usePosts(); // posts === undefined at first if (!posts) return null; return ( <div> <PostList posts={posts} /> </div> );
}

Rất là ok đúng không ? nếu nó đáp ứng điều kiện (!posts có giá trị boolean là true ), thì chúng ta không hiển thị gì trong component cả bằng cách trả về null.

Nó cũng vẫn sẽ hoạt động trong trường hợp chúng ta có multiple conditions, ví dụ chúng ta muốn check khi có loading và error states trước khi chúng ta hiển thị ra dữ liệu của posts :

export default function App() { const { isLoading, isError, posts } = usePosts(); if (isLoading) return <div>Loading...</div>; if (isError) return <div>Error!</div>; return ( <div> <PostList posts={posts} /> </div> );
}

Lưu ý rằng chúng ta có thể reuse lại câu lệnh if và không cần phải viết if-else hoặc if-else-if, điều này sẽ giúp chúng ta cắt giảm code và dễ đợc hơn rất nhiều.

2. Sử dụng toán tử ba ngôi để viết các điều kiện hiển thị.

Việc sử dụng câu lệnh if rất hợp lí khi chúng ta muốn không hiển thị gì hoặc hiện thị một component hoàn toàn khác.

Tuy nhiên, nếu chúng ta muốn viết một điệu kiện mà trả về những JSX khác nhau, đó là khi chúng ta sử dụng đến toán tử ba ngôi :

function App() { const isMobile = useWindowSize() return ( <main> <Header /> <Sidebar /> {isMobile ? <MobileChat /> : <Chat />} </main> )
}

Ngoài ra chúng ta còn có thể gán cho nó thành một biến :

function App() { const isMobile = useWindowSize(); const ChatComponent = isMobile ? <MobileChat /> : <Chat />; return ( <main> <Header /> <Sidebar /> {ChatComponent} </main> )
}

3. Không sử dụng else mà thay vào đó là dùng && (and).

Trong nhiều trường hợp, chúng ta muốn sử dụng một toán tử bậc ba để check điều kiện hiển thị trong JSX của mình, nhưng trong một số trường hợp thì bạn không muốn hiển thị bất cứ điều gì

Nó sẽ tương ứng với đoạn check code điều kiện như sau :

condition ? <Component /> : null

Nếu không muốn sử dụng else thì chúng ta có thể sử dụng dấu && :

export default function PostFeed() { const { posts, hasFinished } = usePosts() return ( <> <PostList posts={posts} /> {hasFinished && ( <p>You have reached the end!</p> )} </> )
}

4. Sử dụng Switch cho việc check nhiều điều kiện.

Điều gì sẽ xảy ra nếu chúng ta ở trong một tình huống có nhiều điều kiện khác nhau, hai hoặc là hơn nữa ?

Chúng ta có thể viết một lúc một đống câu lệnh if, nhưng với việc sử dụng tất cả các câu lệnh if này, nó sẽ làm cho đoạn code của chúng ta trở nên lộn xộn hơn, khó quản lí hơn

Vậy thì đến lúc chúng ta cần phải ngâm cứu đến việc sử dụng switch, ví dụ nhé chúng ta có một component Menu, khi click vào thì nó sẽ xổ ra rất nhiều tabs, chúng ta có các tabs có thể hiện thị dữ liệu người dùng :

export default function Menu() { const [menu, setMenu] = React.useState(1); function toggleMenu() { setMenu((m) => { if (m === 3) return 1; return m + 1; }); } return ( <> <MenuItem menu={menu} /> <button onClick={toggleMenu}>Toggle Menu</button> </> );
} function MenuItem({ menu }) { switch (menu) { case 1: return <Users />; case 2: return <Chats />; case 3: return <Rooms />; default: return null; }
}

Với việc sử dụng switch mỗi một MenuItem Component của chúng ta đã được sắp xếp rất logic và chỉ hiện thị khi gặp đúng điêu kiện, chúng ta có thể dễ dàng xem được thành phần nào sẽ được hiển thị.

5. Gợi ý.

Mình muốn giới thiệu với các bạn một plugin Barbel giúp mọi người có thể check các điều kiện một cách dễ dàng hơn

Chúng ta có thể cài đặt bằng cách chạy câu lệnh sau :

npm install --save-dev babel-plugin-jsx-control-statements

Trong file .barbelrc thì thêm dòng này :

"plugins": ["jsx-control-statements"]

Đây là một plugin Babel cho phép bạn sử dụng các React component trực tiếp trong JSX của mình để viết các điều kiện rất dễ hiểu, ví dụ nè :

export default function App() { const { isLoading, isError, posts } = usePosts(); return ( <Choose> <When condition={isLoading}> <div>Loading...</div> </When> <When condition={isError}> <div>Error!</div> </When> <Otherwise> <PostList posts={posts} /> </Otherwise> </Choose> );
}

Kết bài.

Vậy là bài viết của mình đã kết thúc rồi

Nếu thấy hay hãy like, share và upvote cho bài viết của mình nhé

Cảm ơn mọi người ???

Bình luận

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

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

Giới thiệu Typescript - Sự khác nhau giữa Typescript và Javascript

Typescript là gì. TypeScript là một ngôn ngữ giúp cung cấp quy mô lớn hơn so với JavaScript.

0 0 528

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

Bạn đã biết các tips này khi làm việc với chuỗi trong JavaScript chưa ?

Hi xin chào các bạn, tiếp tục chuỗi chủ đề về cái thằng JavaScript này, hôm nay mình sẽ giới thiệu cho các bạn một số thủ thuật hay ho khi làm việc với chuỗi trong JavaScript có thể bạn đã hoặc chưa từng dùng. Cụ thể như nào thì hãy cùng mình tìm hiểu trong bài viết này nhé (go).

0 0 436

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

Một số phương thức với object trong Javascript

Trong Javascript có hỗ trợ các loại dữ liệu cơ bản là giống với hầu hết những ngôn ngữ lập trình khác. Bài viết này mình sẽ giới thiệu về Object và một số phương thức thường dùng với nó.

0 0 158

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

Tìm hiểu về thư viện axios

Giới thiệu. Axios là gì? Axios là một thư viện HTTP Client dựa trên Promise.

0 0 149

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

Imports và Exports trong JavaScript ES6

. Giới thiệu. ES6 cung cấp cho chúng ta import (nhập), export (xuất) các functions, biến từ module này sang module khác và sử dụng nó trong các file khác.

0 0 113

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

Bài toán đọc số thành chữ (phần 2) - Hoàn chỉnh chương trình dưới 100 dòng code

Tiếp tục bài viết còn dang dở ở phần trước Phân tích bài toán đọc số thành chữ (phần 1) - Phân tích đề và những mảnh ghép đầu tiên. Bạn nào chưa đọc thì có thể xem ở link trên trước nhé.

0 0 249