【问题标题】:ReactJS onclick add or remove class to another elementReactJS onclick 向另一个元素添加或删除类
【发布时间】:2020-12-07 10:42:34
【问题描述】:

我正在努力将我的普通 jQuery 代码转换为 React JS(我是 React 新手)。

我有以下代码:

$(".add").click(function () {
    $("nav").addClass("show");
});
$(".remove").click(function () {
    $("nav").removeClass("show");
});
$(".toggle").click(function () {
    $("nav").toggleClass("show");
});
nav {
  width: 250px;
  height: 150px;
  background: #eee;
  padding: 15px;
  margin-top: 15px;
}
nav.show {
  background: red;
  color: white;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<button class="add">Add</button>
<button class="remove">Remove</button>
<button class="toggle">Toggle</button>
<nav>Navigation menu</nav>

尝试过的引用似乎只能为同一元素添加/删除类:

https://stackoverflow.com/a/42630743/6191987

How to add or remove a className on event in ReactJS?

那么,如何将相同的 jQuery 方法转换或创建为 ReactJS?

【问题讨论】:

  • 请告诉我们你到目前为止在 React 中做了什么。
  • @SibasishMohanty 已经添加了引用,但这对我的情况没有帮助。我提到我是 React JS 的新手

标签: javascript html jquery node.js reactjs


【解决方案1】:
  1. 使用状态来跟踪是否显示导航。
  2. 在反应代码中使用与状态相对应的类名。
  3. React 使用“className”而不是“class”,因为“class”已经是 javascript 中的保留字。

你可以检查这个sandbox link for implementation

function App() {
  const [show, setShow] = React.useState();

  return (
    <div className="App">
      <button className="add" onClick={() => setShow(true)}>
        Add
      </button>
      <button className="remove" onClick={() => setShow(false)}>
        Remove
      </button>
      <button className="toggle" onClick={() => setShow(!show)}>
        Toggle
      </button>
      <nav className={show ? "show" : ""}>Navigation menu</nav>
    </div>
  );
}

【讨论】:

  • @vishnu 你可以使用模板字符串。由于 classNames 是字符串,因此您可以将它们连接起来。 &lt;nav className={nav ${显示? "显示" : ""}}&gt;Navigation menu&lt;/nav&gt;
  • @vishnu 我还对代码沙箱链接进行了更改。您也可以在那里查看。
  • 这对我有用。感谢您的大力支持
【解决方案2】:

您可以将 useRef 用于 nav 并使用每个按钮的事件处理程序来操作 ref(访问 nav 的 DOM)

import React from "react";
import "./styles.css";

export default function App() {
  const navRef = React.useRef(null);

  const onAddClick = (e) => {
    navRef.current.classList.add("show");
  };

  const onRemoveClick = (e) => {
    navRef.current.classList.remove("show");
  };

  const onToggleClick = (e) => {
    navRef.current.classList.toggle("show");
  };

  return (
    <div className="App">
      <button onClick={onAddClick}>Add</button>
      <button onClick={onRemoveClick}>Remove</button>
      <button onClick={onToggleClick}>Toggle</button>
      <nav ref={navRef}>Navigation menu</nav>
    </div>
  );
}
.App {
  font-family: sans-serif;
}

nav {
  width: 250px;
  height: 150px;
  background: #eee;
  padding: 15px;
  margin-top: 15px;
}

nav.show {
  background: red;
  color: white;
}

演示的 Codesanbox 链接

参考:

【讨论】:

  • 显示类型错误:“无法读取属性 'classList' of null”
  • @vishnu 你有没有尝试过codesandbox链接中实现的内容?
  • @vishnu 你能通过imgur链接把你的代码截图发给我吗?
  • 错误 scrn.shot: https://imgur.com/a/i1GlDcQ
  • @vishnu 谢谢,但我的意思是代码,而不是错误,如果我可以看一下代码的一部分以检查发生了什么会更好
猜你喜欢
  • 2019-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多