希望这是一个真正简单的问题,但我很难理解为什么有那么复杂的答案。我目前正在将一个网站从普通HTML/CSS/JS转换到React。在其中,你有一个外部的Vanilla JS文件,其中包含使汉堡菜单打开和关闭所需的代码。
就像这样:
就像这样:
// Variables
let line1 = document.getElementById("hamburger-line-1");
let line2 = document.getElementById("hamburger-line-2");
let hamburger = document.getElementById("hamburger");
let navList = document.getElementById("hamburger-nav-list");
// Function
function hamburgerActive() {
line1.classList.toggle("active");
line2.classList.toggle("active");
navList.classList.toggle("active");
}
// Event Listener
hamburger.addEventListener("click", hamburgerActive);
现在,我已经使用React渲染了头部,其中包含汉堡菜单。这些内容存储在一个index.js文件中,使用一个单独的组件从“Header.js”文件中导入并渲染。
我该如何将原始的JS代码转移到我的Header组件中?最好的方法是在Header.js文件中添加一个“onclick”功能吗?
所有的替代方案都在谈论引入props、states等等——对我来说,这显得过于复杂,因为这只是一个非常简单的原始JS操作。肯定有一种简单的方法可以将代码放进去并使其正常工作吧?
供参考,以下是Header组件的现有代码:
class Header extends React.Component {
render() {
return (
<header className="universal-header-section">
<div className="universal-header-container">
<div className="universal-header-hamburger">
<div id="hamburger">
<span id="hamburger-line-1" class="hamburger-span" />
<span id="hamburger-line-2" class="hamburger-span" />
</div>
</div>
<div className="universal-header-logo">
<a href="index">
<h2>TBC</h2>
</a>
</div>
<div className="universal-header-basket">
<a href="basket">
<i className="fas fa-shopping-cart fa-2x"></i>
</a>
</div>
</div>
<div id="hamburger-nav-list">
<div class="hamburger-container">
</div>
</div>
</header>
)
}
}
有人能给些建议吗?还是我需要使用 props/state ?
谢谢。希望这一切都说得通!
<span id="hamburger-line-1" class=
hamburger-span ${toggle ? 'active' : ''}/>
我的意思是,如果toggle
为真,则添加active
类。这样说通吗? - Red Baronconsole.log(toggle)
,每次单击它都会显示 true/false 吗? - Red Baron