javascript - NextJS - 引用错误:文档未定义
问题描述
我正在运行 NextJS v11.1.12,并且正在尝试运行一个标准的 Vanilla JS 函数,该函数使用“state-select-dropdown-box”类切换 div 的 CSS 类。我的代码是:
const Header = () => {
const dropDownMenu = document.querySelector('state-select-dropdown-box');
console.log(dropDownMenu);
function toggleMenu() {
dropDownMenu.classList.toggle('show');
}
return ( <Component /> );
}
当应用程序编译时,我得到“参考错误:文档未定义”。奇怪的是,我今天早些时候运行了这些功能,没有任何问题,也没有改变任何东西。
经过一些大规模的谷歌搜索和研究,我得出的结论是,也许我只是不了解 NextJS 中的 SSR 是如何工作的?谁能解释或阐明为什么我没有达到我期望的结果以及如何解决这个问题?
解决方案
@Surjeet Bhadauriya 的回答在技术上是正确的,但是 next.js 提供了动态加载组件的内置功能,实际上next/dynamic
您可以在没有SSR
.
从文档:
您可能并不总是希望在服务器端包含一个模块。例如,当模块包含仅在浏览器中工作的库时。
const Header = () => {
const dropDownMenu = document.querySelector('state-select-dropdown-box');
console.log(dropDownMenu);
function toggleMenu() {
dropDownMenu.classList.toggle('show');
}
return ( <Component /> );
}
export default Header
然后在您的页面(或您导入它的任何地方):
import dynamic from 'next/dynamic'
const DynamicComponentWithNoSSR = dynamic(
() => import('../components/Header'),
{ ssr: false } // <-- not including this component on server-side
)
推荐阅读
- python - How can I use a global variable in another file in Python?
- linux - Where/How should I define my SPI driver pins if I pretend to load the driver manually as a module
- java - Vaadin 过滤器日期列
- c++ - 单个程序的 C++ 信号处理
- xamarin.forms - Xamarin Http 请求超时问题
- mongodb - 如何使值以百分比格式显示在文本框 vba 用户窗体中
- flask - after_request 用例 - Flask
- python - 无法使用形状为 [512,1] 的张量更新形状为 [2] 的变量,形状必须相等。[操作:分配添加变量操作]
- javascript - 将 mongoDB 与 node.js 与驱动程序一起使用
- c++ - 为什么使用 Logger 而不是 cout?