我使用ReactJS与Routing,ES6,Babel和ESLint。
点击后我想使用类名库添加一个CSS类,但我甚至无法使用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
}
};
有什么想法吗?
答案 0 :(得分:3)
您必须将此部分代码移至方法componentDidMount()
const sideNavToggleButton = document.querySelector('.js-toggle-menu');
sideNavToggleButton.addEventListener('click', () => {
console.info('clicked');
});
因为componentDidMount()是在第一次渲染here之后调用的方法。渲染后你可以做任何dom操作。