【发布时间】:2021-05-15 11:43:05
【问题描述】:
我正在尝试构建一个切换侧边栏。当我单击按钮时,.m-toggle 的类列表应该会更新。但是反应给我一个错误
"TypeError: 无法读取属性 'classList' of null"
这是我的代码:
import React, { useState, useEffect } from 'react'
// import Sidebar from '../Components/Sidebar'
import AppleIcon from '@material-ui/icons/Apple'
import DashboardIcon from '@material-ui/icons/Dashboard'
import PeopleIcon from '@material-ui/icons/People'
import NotificationsIcon from '@material-ui/icons/Notifications'
import SettingsIcon from '@material-ui/icons/Settings'
import HelpIcon from '@material-ui/icons/Help'
import img from '../Assets/img/keval.jpg'
function toggleMenu() {
let toggle = document.querySelector('.m-toggle')
toggle.classList.toggle('m-active')
}
const Main = () => {
return (
<>
<div className="m-body">
<div className="m-container">
{/* -------Sidebar Start------- */}
<div className="m-navigation">
<ul style={{ padding: '0' }}>
<li>
<a href="#">
<span className="m-icon">
<AppleIcon className="muicon" />
</span>
<span className="m-title">
<h2>Brand Name</h2>
</span>
</a>
<hr style={{ color: 'white' }} />
</li>
<li>
<a href="#">
<span className="m-icon">
<DashboardIcon className="muicon" />
</span>
<span className="m-title">Dashboard</span>
</a>
</li>
<li>
<a href="#">
<span className="m-icon">
<PeopleIcon className="muicon" />
</span>
<span className="m-title">Employees</span>
</a>
</li>
<li>
<a href="#">
<span className="m-icon">
<NotificationsIcon className="muicon" />
</span>
<span className="m-title">Notification</span>
</a>
</li>
<li>
<a href="#">
<span className="m-icon">
<HelpIcon className="muicon" />
</span>
<span className="m-title">Help</span>
</a>
</li>
<li>
<a href="#">
<span className="m-icon">
<SettingsIcon className="muicon" />
</span>
<span className="m-title">Setting</span>
</a>
</li>
</ul>
</div>
{/* --------Side BAr End--------- */}
<div className="m-main">
<div className="m-topbar">
<div className="m-toggle" onClick={toggleMenu()}>
f
</div>
<div className="m-search">
<label>
<input type="text" placeholder="Search here" />
</label>
</div>
<div className="user">
<img src={img} alt="no img" />
</div>
</div>
</div>
</div>
</div>
</>
)
}
export default Main
你可以看到onclick类列表应该更新但没有更新的代码。
【问题讨论】:
-
“文档查询选择器返回未定义...”(不会是这种情况)但随后 “类型错误:无法读取属性 ClassList 的空”。标题应该对实际问题给出适当的总结,而不是“可能描述情况足够好”
-
可能是在样式表中您使用
display: none表示.m-toggle或父元素。如果你想通过querySelector获取元素,你需要使用visibility: hidden -
这是因为你这样做了
onClick={toggleMenu()},它甚至在挂载之前就立即调用了该函数。你应该使用onClick={toggleMenu} -
... 并且由于在 .m-toggle 元素上触发了 click 事件,因此您不需要使用 querySelector,因为
this已经引用了该元素
标签: javascript css node.js reactjs