javascript - 使用 Refs 设置 div 元素的样式
问题描述
再会,
我是反应 JS 的新手,我想使用 refs 获取一个 div 元素并设置它的样式。它给出了一个错误(无法读取未定义的属性样式)。
import React, { useState, useRef } from 'react'
function Menubar() {
const [show, setshow] = useState(false)
const clickref = useRef()
const openMenu = () => {
if (show === false) {
clickref.current.style.display = "block";
setshow(true);
}
clickref.current.style.display = "none";
setshow(false);
}
return (
<div className="menu">
<div className="menuBar">
<div className="navBar ">
<img src={Drop} alt="DrpBtn" className="drpBtn" onClick={openMenu()} />
<ul className="navCon" ref={clickref}>
<li><Link to="/">Home</Link></li>
<li><Link to="/menu">Menu</Link></li>
<li><Link to="/news">News</Link></li>
<li><Link to="/about">About</Link></li>
<li><Link to="/contact">Contact Us</Link></li>
<li><Link to="/patner">Patner</Link></li>
</ul>
</div>
</div>
</div>
)
}
export default Menubar
解决方案
由于您是新来的反应,我会说您在这里滥用 refs。使用您已经必须执行逻辑的状态值,例如:
import React, { useState } from 'react'
import { Link } from 'react-router-dom';
function Menubar() {
const [show, setShow] = useState(false);
const toggleMenu = () => {
// toggle the current state
setShow(current => !current);
};
return (
<div className="menu">
<div className="menuBar">
<div className="navBar ">
<button onClick={toggleMenu}>toggle</button>
{/*use show to handle the styling*/}
<ul className="navCon" style={{display: show ? 'block' : 'none'}}>
<li><Link to="/">Home</Link></li>
<li><Link to="/menu">Menu</Link></li>
<li><Link to="/news">News</Link></li>
<li><Link to="/about">About</Link></li>
<li><Link to="/contact">Contact Us</Link></li>
<li><Link to="/patner">Patner</Link></li>
</ul>
</div>
</div>
</div>
)
}
export default Menubar;
推荐阅读
- mysql - 设计审查,额外选择以在 MySQL 中获得抽象
- c# - 为什么 ASP.NET Core 操作可以返回 `ActionResult
>` 返回任何对象的 `BadRequest()`? - regex - mongodb聚合查找管道正则表达式匹配
- r - 如何从列向量中识别缺失的月份?
- f# - FsCheck 惰性生成器
- python - 如何使用 2 个参数添加查询
- javascript - 在 IntelliJ IDEA 2019.2 社区版中设置一个 typescript 项目
- ruby-on-rails - 通过比较 Rails 5 中现有列的值来添加新列
- amazon-web-services - 是否可以在不使用负载均衡器或目标组的情况下将 AWS ECS 服务部署到 EC2 扩展组或 1 个特定 EC2 实例
- spring-boot - 测试从服务类返回 ResponseEntity 的方法 - Spring boot