Published on

Chèn JS vào trang web với React/Next.js

Cách chèn JS vào trang web đặc thù với React/Next.js
Chèn JS vào trang web với React/Next.js
Authors
  • Name
    Nguyen Pham

Tổng quan

Trong một số trường hợp, quý vị cần chèn một đoạn mã JS vào một trang web cụ thể, ví dụ như trang index, một trang web quảng cáo, một trang web chứa một số hiệu ứng đặc biệt, v.v. Trong bài viết này mình sẽ huớng dẫn cách chèn JS vào một trang web đặc biệt với React/Next.js.

Để làm được điều này quý vị cần sử dụng useEffect để chèn đoạn mã JS vào trang web. Hàm này cho phép đoạn mã JS chạy sau khi component được render.

jsx
// index.tsx
import { useEffect } from "react";
const Index = () => {
	useEffect(() => {
		const inlineScript = document.createElement('script');
		inlineScript.innerHTML = `
			function elmOnScroll() {
				console.log('scrolling');
			}
			setTimeout(function () {
				elmOnScroll();
			}, 1000);
			window.onscroll = function () {
				elmOnScroll();
			};
			var Winscroll = document.documentElement.scrollTop || document.body.scrollTop;
			if (Winscroll > 100) {
				elmOnScroll();
			}
		`;
		document.body.append(inlineScript);
		return () => {
			inlineScript.remove();
		};
	}, []);

	return (
		<>
		...
		</>
	);
};
export default Index;

router.isReady

Nếu quý vị sử dụng Next.js, quý vị cần kiểm tra xem router đã sẵn sàng chưa trước khi chèn JS vào trang web. Điều này giúp tránh lỗi khi truy cập trực tiếp vào trang web.

jsx
// index.tsx
import { useEffect } from "react";
import { useRouter } from 'next/router';
const Index = () => {}
    useEffect(() => {
        if (router.isReady) {
            // Chèn JS vào trang web
        }
    }, [router.isReady]);
    return (
        <>
        ...
        </>
    );
};
export default Index;
Nguyen Pham

Nguyen Pham

Làm việc tại phòng thí nghiệm MADE, Texas, USA. Là một người đam mê với công nghệ và thích chia sẻ kiến thức với mọi người.

Nguyen Pham — là nhà phát triển và thiết kế giàu kinh nghiệm tập trung vào WordPress, NextJS, Angular. Hãy xem một số dự án chúng tôi đã thực hiện và các sản phẩm nội bộ của chúng tôi.
Liên kết
Made by VueJS and Vercel Cloud· All rights reserved.