React "文档未定义;当包含脚本时

React "document not defined" when including script

本文关键字:包含 脚本 文档 quot React 未定义      更新时间:2023-09-26

我使用ReactJS与路由,ES6, Babel和ESLint。点击我想添加一个CSS类使用classnames库,但我甚至不能使用document.querySelector。我的整个应用程序崩溃并打印错误:ReferenceError: document is not defined

import React from 'react';
import { connect } from 'react-redux';
export default class Nav extends React.Component {
    constructor(props) {
        super(props);
        const sideNavToggleButton = document.querySelector('.js-toggle-menu');
        sideNavToggleButton.addEventListener('click', () => {
            console.info('clicked');
        });
    }
    render() {
        return (
            <header>
                <button role="tab" className="header__menu js-toggle-menu">Toggle nav menu</button>
                <h1 className="header__title">App Shell</h1>
            </header>
        );
    }
}

经过一番研究,我发现这可能是我的ESLint设置缺少一些环境,但在添加浏览器后,应用程序仍然崩溃。

module.exports = {
    'parser': 'babel-eslint',
    'plugins': [
        'react'
    ],
    'rules': {
        'indent': [2, 'tab'],
        'max-len': 0,
        'no-console': [2, { allow: ['info', 'error']}],
        'no-param-reassign': 0,
        'react/jsx-indent': [2, 'tab'],
        'react/jsx-indent-props': [2, 'tab'],
        'no-new': 0
    },
    'env': {
        'browser': true,
        'node': true
    }
};

任何想法?

您必须将这部分代码移动到方法componentDidMount()

const sideNavToggleButton = document.querySelector('.js-toggle-menu');
sideNavToggleButton.addEventListener('click', () => {
    console.info('clicked');
});

因为componentDidMount()是在这里第一次呈现之后调用的方法。呈现后,您可以进行任何dom操作。