ReferenceError: document is not defined (in plain JavaScript)

前端 未结 4 1998
遇见更好的自我
遇见更好的自我 2020-11-29 07:17

I get the a \"ReferenceError: document is not defined\" while trying to

var body = document.getElementsByTagName(\"body\")[0];

I have seen

4条回答
  •  南笙
    南笙 (楼主)
    2020-11-29 07:59

    This happened with me because I was using Next JS which has server side rendering. When you are using server side rendering there is no browser. Hence, there will not be any variable window or document. Hence this error shows up.

    Work around :

    If you are using Next JS you can use the dynamic rendering to prevent server side rendering for the component.

    import dynamic from 'next/dynamic'
    
    const DynamicComponentWithNoSSR = dynamic(() => import('../components/List'), {
      ssr: false
    })
    
    export default () => 
    

    If you are using any other server side rendering library. Then add the code that you want to run at the client side in componentDidMount. If you are using React Hooks then use useEffects in the place of componentsDidMount.

    import React, {useState, useEffects} from 'react';
    
    const DynamicComponentWithNoSSR = <>Some JSX
    
    export default function App(){
    
    [a,setA] = useState();
    useEffect(() => {
        setA()
      });
    
    
    return (<>{a}<>)
    }
    

    References :

    1. https://nextjs.org/docs/advanced-features/dynamic-import#with-no-ssr
    2. https://reactjs.org/docs/hooks-effect.html

提交回复
热议问题