چگونه تگ اسکریپت به React/JSX اضافه کنیم؟
برای اضافه کردن اسکریپتهای درون خطی به یک کامپوننت React، چندین روش وجود دارد که میتوان از آنها استفاده کرد. با توجه به نیازمندیها و ساختار پروژه، ممکن است یکی از این روشها مناسبتر باشد.
اولین راهکار، استفاده از componentDidMount برای بارگذاری اسکریپتها است. در این روش، میتوانید با استفاده از کد زیر یک تگ اسکریپت به بدنه سند اضافه کنید:
componentDidMount() {
const script = document.createElement("script");
script.src = "https://use.typekit.net/foobar.js";
script.async = true;
document.body.appendChild(script);
}
این روش باعث میشود که اسکریپت تنها یک بار، هنگام بارگذاری کامپوننت، بارگذاری شود و از بارگذاری مجدد آن در هر بار رندر کردن کامپوننت جلوگیری کند. اگر میخواهید از useEffect استفاده کنید، میتوانید به شکل زیر عمل کنید:
import { useEffect } from 'react';
const MyComponent = () => {
useEffect(() => {
const script = document.createElement('script');
script.src = "https://use.typekit.net/foobar.js";
script.async = true;
document.body.appendChild(script);
return () => {
document.body.removeChild(script);
};
}, []);
return (
<div>
{/* محتوا */}
</div>
);
};
به علاوه، میتوانید این عملکرد را به یک هوک سفارشی تبدیل کنید تا استفاده از آن در کامپوننتهای مختلف سادهتر شود:
const useScript = url => {
useEffect(() => {
const script = document.createElement('script');
script.src = url;
script.async = true;
document.body.appendChild(script);
return () => {
document.body.removeChild(script);
};
}, [url]);
};
سپس این هوک را میتوانید به راحتی فراخوانی کنید:
import useScript from 'hooks/useScript';
const MyComponent = () => {
useScript('https://use.typekit.net/foobar.js');
return (
<div>
{/* محتوا */}
</div>
);
};
روش دیگری که میتوانید از آن استفاده کنید، استفاده از کتابخانه react-helmet است. این کتابخانه به شما این امکان را میدهد که تغییرات در هدر سند را به راحتی مدیریت کنید:
import { Helmet } from "react-helmet";
class Application extends React.Component {
render() {
return (
<div className="application">
<Helmet>
<script src="https://use.typekit.net/foobar.js"></script>
<script>try{Typekit.load({ async: true });}catch(e){}</script>
</Helmet>
{/* محتوا */}
</div>
);
}
};
با استفاده از این روشها، میتوانید به نحو مؤثری اسکریپتها را در کامپوننتهای React خود بارگذاری کنید و به عملکردهای مورد نیاز دسترسی داشته باشید.