包含脚本时反应 "document not defined"
React "document not defined" when including script
我将 ReactJS 与路由、ES6、Babel 和 ESLint 一起使用。
单击我想使用 class 名称库添加 CSS class,但我什至不能使用 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()
是第一次渲染后调用的方法here。渲染后,您可以进行任何 dom 操作。
我将 ReactJS 与路由、ES6、Babel 和 ESLint 一起使用。
单击我想使用 class 名称库添加 CSS class,但我什至不能使用 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()
是第一次渲染后调用的方法here。渲染后,您可以进行任何 dom 操作。