#javascript #next.js
Вопрос:
Я учусь Next.js и потратили часы, пытаясь добавить внешний javascript.
Я хочу загрузить этот внешний скрипт, который я назвал query.js в /pages/index.js
console.log("script loaded!")
function hello(){
console.log("hello!")
}
Скрипт загружается, когда я импортировал скрипт на _app.js
import '../styles/globals.css'
import '../public/static/query.js'
function MyApp({ Component, pageProps }) {
return <Component {...pageProps} />
}
export default MyApp
но вызов функции, подобной этой, на index.js возвращено «Ошибка ссылки: привет не определен», хотя сценарий уже загружен.
export default function Home() {
return (
/* some div */
{hello()}
/* the rest of the code */
)
что я сделал не так? Я хочу, чтобы скрипт выполнял некоторую обработку данных в браузере. Я пытался
Комментарии:
1. вы должны экспортировать «привет» из query.js
2. что ты хочешь сделать с приветом? если вы хотите только протестировать, то оберните свой код в useEffect, который обеспечит выполнение на стороне клиента
Ответ №1:
это полностью зависит от того, как вы планируете импортировать свой файл JS.
Ваш нынешний подход
ваш текущий подход заключается в создании модуля только для побочных эффектов, который инициализируется вашим оператором импорта — вот почему вы видите этот console.log
оператор. чтобы выполнить эту работу, просто прикрепите hello
функцию к объекту окна, что не рекомендуется.
Рекомендуемый подход
Обычно лучше всего создавать модули без побочных эффектов. в этом случае, чтобы это сработало, вы должны export
использовать свою функцию и import
ее в любом модуле, который вам нужен. вот пример:
console.log("script loaded!")
export function hello(){
console.log("hello!")
}
и в вашем модуле
import {hello} from 'wherever';
export default function Home() {
return (
/* some div */
{hello()}
/* the rest of the code */
)
Комментарии:
1. это работает! спасибо, мне нужно импортировать все функции вручную одну за другой или есть способ импортировать все?
2. @namaasliku Лучше всего делать это по одному. таким образом, ваш транспайлер может «встряхнуть дерево» неиспользуемого кода, что приведет к уменьшению размера пакета.