Javascript 未能在react组件内部使用文档对象&引用;“未定义文档”;错误
我在react组件内部使用了一些浏览器嗅探代码Javascript 未能在react组件内部使用文档对象&引用;“未定义文档”;错误,javascript,reactjs,next.js,Javascript,Reactjs,Next.js,我在react组件内部使用了一些浏览器嗅探代码 import React,{useState}来自“React” 常量SomeComponent=({props})=>{ const isIE=document.documentMode; 返回( 这里有一些浏览器嗅探代码。 ) }当您使用Next.js时,您应该知道,您的一些代码将在服务器端运行,其中窗口,文档和其他特定于浏览器的API将不可用 由于useffecthook仅在客户端运行,因此您可以将其与useState一起使用以实现您的目标
import React,{useState}来自“React”
常量SomeComponent=({props})=>{
const isIE=document.documentMode;
返回(
这里有一些浏览器嗅探代码。
)
}
当您使用Next.js
时,您应该知道,您的一些代码将在服务器端运行,其中窗口
,文档
和其他特定于浏览器的API将不可用
由于useffect
hook仅在客户端运行,因此您可以将其与useState
一起使用以实现您的目标:
import React, { useState, useEffect } from "react";
const SomeComponent = ({ props }) => {
const [isIE, setIsIE] = useState(false);
useEffect(() => {
setIsIE(document.documentMode);
}, []);
if (!isIE) return null;
return <div>Some browser sniffing code here.</div>;
};
import React,{useState,useffect}来自“React”;
常量SomeComponent=({props})=>{
const[isIE,setIsIE]=useState(false);
useffect(()=>{
setIsIE(document.documentMode);
}, []);
如果(!isIE)返回null;
在此处返回一些浏览器嗅探代码。;
};
当您使用Next.js
时,您应该知道,您的一些代码将在服务器端运行,其中窗口
,文档
和其他特定于浏览器的API将不可用
由于useffect
hook仅在客户端运行,因此您可以将其与useState
一起使用以实现您的目标:
import React, { useState, useEffect } from "react";
const SomeComponent = ({ props }) => {
const [isIE, setIsIE] = useState(false);
useEffect(() => {
setIsIE(document.documentMode);
}, []);
if (!isIE) return null;
return <div>Some browser sniffing code here.</div>;
};
import React,{useState,useffect}来自“React”;
常量SomeComponent=({props})=>{
const[isIE,setIsIE]=useState(false);
useffect(()=>{
setIsIE(document.documentMode);
}, []);
如果(!isIE)返回null;
在此处返回一些浏览器嗅探代码。;
};
js是一个SSR框架,您的代码将同时在服务器端和客户端运行<在服务器端运行时,不会定义代码>窗口
。如果要从窗口
获取属性,可以尝试以下方法
窗口
if (typeof window !== 'undefined') {
console.log(window.document)
}
。在这种情况下,可以使用dynamic
组件/客户端组件
const ClientSideComponent = props => {
// You could get window directly in this component
console.log(window.document)
return (
<div>
run your code only on client side
</div>
)
}
const ClientSideComponent=props=>{
//您可以直接在该组件中获取窗口
console.log(window.document)
返回(
只在客户端运行代码
)
}
页面/索引
import dynamic from 'next/dynamic';
const ClientSideComponent = dynamic(() => import('../components/ClientSideComponent'), {
ssr: false,
});
const HomePage = props => {
return <ClientSideComponent />
}
从“下一个/动态”导入动态;
const ClientSideComponent=dynamic(()=>import('../components/ClientSideComponent'){
ssr:错,
});
const HomePage=props=>{
返回
}
Next.js
是一个SSR框架,您的代码将同时在服务器端和客户端运行<在服务器端运行时,不会定义代码>窗口。如果要从窗口
获取属性,可以尝试以下方法
窗口
if (typeof window !== 'undefined') {
console.log(window.document)
}
。在这种情况下,可以使用dynamic
组件/客户端组件
const ClientSideComponent = props => {
// You could get window directly in this component
console.log(window.document)
return (
<div>
run your code only on client side
</div>
)
}
const ClientSideComponent=props=>{
//您可以直接在该组件中获取窗口
console.log(window.document)
返回(
只在客户端运行代码
)
}
页面/索引
import dynamic from 'next/dynamic';
const ClientSideComponent = dynamic(() => import('../components/ClientSideComponent'), {
ssr: false,
});
const HomePage = props => {
return <ClientSideComponent />
}
从“下一个/动态”导入动态;
const ClientSideComponent=dynamic(()=>import('../components/ClientSideComponent'){
ssr:错,
});
const HomePage=props=>{
返回
}
React.render()函数在哪里?我可以看一下吗?文件中没有呈现函数,因为它是一个函数组件(函数组件在语法中没有呈现函数),请看一下您的文件app.js或index.js。您肯定找到了这段代码ReactDOM.render(,document.getElementById(“root”);React.render()函数在哪里?我可以看一下吗?文件中没有呈现函数,因为它是一个函数组件(函数组件在语法中没有呈现函数),请看一下您的文件app.js或index.js。您肯定找到了这段代码ReactDOM.render(,document.getElementById(“root”);