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

Các phương pháp tránh hiển thị lại các component dùng chung trong Nextjs ( Part cuối )

0 0 38

Người đăng: Moe Moe

Theo Viblo Asia

Đặt vấn đề

Nếu các bạn chưa xem các phần trước, hãy xem tại đây: Part 1 Part 2

Ở bài trước, ta đã tìm ra cách giải quyết việc hiển thị lại các component dùng chung trong Nextjs bằng cách để các page tự xử lý, nhưng vẫn tồn tại điểm yếu rằng các page chỉ chọn được 1 component sử dụng chung , do đó ta sẽ xem xét đến cách giải quyết vấn đề này.

Ở bài viết này, vẫn sử dụng project ở các bài trước.

Cách cuối: Vẫn để các page sẽ tự quản lý nên dùng component nào nhưng dùng hàm thay vì biến

Ta xem lại cấu trúc project :


Mọi file vẫn giữ nguyên, ta sẽ chỉnh sửa lại các file index, user và _app:
import InputLayout from '../components/InputLayout';
import LabelLayout from '../components/LabelLayout';
import Link from 'next/link'; const Home = () => { return ( <div> <h2>Day la Page Home</h2> <Link href='/user' passHref> <button>Sang page User</button> </Link> </div> )
} Home.sharedComponentFunction = (page) => ( <LabelLayout> <InputLayout> {page} </InputLayout> </LabelLayout>
) export default Home;

import InputLayout from '../components/InputLayout';
import LabelLayout from '../components/LabelLayout';
import Link from 'next/link'; const User = () => { return ( <div> <h2>Day la Page User</h2> <Link href='/' passHref> <button>Sang page Home</button> </Link> </div> )
} User.sharedComponentFunction = (page) => ( <LabelLayout> <InputLayout> {page} </InputLayout> </LabelLayout>
) export default User;

import '../styles/globals.css' function MyApp({ Component, pageProps }) { const sharedComponentFunction = Component.sharedComponentFunction || (page => page); return sharedComponentFunction(<Component {...pageProps} />);
} export default MyApp

Ở đây, các page sẽ tự chọn component chung qua hàm sharedComponentFunction thay cho biến sharedComponent ở cách 3 trước, điều này cho phép các page có thể chọn nhiều component chung thay vì chỉ 1 component. Khi ta di chuyển các page, _app sẽ nhận hàm sharedComponentFunction này và gọi hàm khi return.
Vậy vấn đề được giải quyết, các page đã tự quản lý component chung với số lượng bất kỳ.

Ờ.... vậy là kết thúc rồi nhỉ ?

Yeah, đây là cách cuối cùng rồi, nhưng trước khi kết thúc, ta nên xem xét nốt 1 vấn đề nhỏ nữa.

Ngăn việc khai báo lặp lại trong hàm khai báo component chung

Như ta thấy trong các page, việc khai báo lặp đi lặp lại sharedComponentFunction là không tốt, thừa thãi và khó cập nhật khi thay đổi => ta nên tạo 1 file riêng khai báo hàm này và gọi lại nó trong các page:

import InputLayout from '../components/InputLayout';
import LabelLayout from '../components/LabelLayout'; export const sharedComponentFunction = (page) => ( <LabelLayout> <InputLayout> {page} </InputLayout> </LabelLayout>
)

và trong page: ( ví dụ index )

import Link from 'next/link';
import { sharedComponentFunction } from '../layout/layout' const Home = () => { return ( <div> <h2>Day la Page Home</h2> <Link href='/user' passHref> <button>Sang page User</button> </Link> </div> )
} Home.sharedComponentFunction = sharedComponentFunction; export default Home;

Vậy là kết thúc, ? hẹn gặp lại các bạn vào bài viết khác.

Bình luận

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

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

Viết một chiếc app quản lý Hạn sử dụng của thực phẩm

Mở đầu. Tôi là 1 kỹ sư công nghệ thông tin mới ra trường. Trong thời gian học Đại học, từ năm 1 tới năm 4, tôi đi làm thêm tại TSUTAYA (chuỗi cửa hàng bán sách, video...v.v nổi tiếng bên Nhật). Về chiếc App tôi đã phát triển. App tôi phát triển là Web App giúp quản lý hạn sử dụng của đồ ăn.

0 0 40

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

Routing trong Next.js

Trước đó bạn có thể đang tò mò về Next.js, vào đây luôn bạn ơi. (go). .

1 0 44

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

Cài đặt chuyển đổi ngôn ngữ trong một project NextJS

Ở phiên bản Nextjs Version 10 mới đây, việc sử dụng i18n đã trở nên dễ dàng hơn qua tính nâng cao là Internationalized Routing. Cài đặt cấu hình cơ bản. Tại file next.config.

0 0 55

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

Cấu hình eslint airbnb, prettier cho dự next.js sử dụng typescript

Chào mọi, mình đã quay lại đây. Hôm nay mình sẽ đem đến một chủ đề linter cụ thể cấu hình eslint cho dự án next.

0 0 177

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

Handling custom page navigation on Next.js

Last month we discussed about different kind of routing on Next.js. Here's a short example of creating a component that moves the user to next page. import { useRouter } from 'next/router'.

0 0 71

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

Next Image một feature, một nâng cấp tuyệt vời version nextjs 10

NextJS đã cho ra mắt version 10 cách đây 2 tháng với hơn 20 fearture nâng cấp đáng giá. Chúng ta có thể kể ra những features nổi bật như. . Next/Image: với khẳ năng render image cho các kích thước màn hình tương ứng.

0 0 49