【问题标题】:How to hide or remove an element onClick in React?如何在 React 中隐藏或删除元素 onClick?
【发布时间】:2021-01-18 11:48:55
【问题描述】:

我试图在单击元素“GorillaSurfIn”后隐藏它。 但它也应该将“setShouldGorillaSurfOut”触发为“true”。第二部分有效,但在我添加了这个功能之后:

function hideGorillaSurfIn() {
    let element = document.getElementById('gorilla-surf-in');
    ReactDOM.findDOMNode(element).style.display = 
  this.state.isClicked ? 'grid' : 'none';
}

点击后,代码崩溃了。

单击后,该元素应隐藏/删除,直到应用程序下次重新启动。

这里是Code Sandbox Link 进一步解释。

我对任何解决方案持开放态度,但也请解释一下,因为我对 React 仍然很陌生。

【问题讨论】:

  • 只是一些旁注:你操纵可见性的方式完全不适合反应——而不是设置 DOM 元素样式,你应该依赖状态(本地或全局)并相应地修改它带有事件处理程序;只要您在整个应用程序中使用功能组件,就没有this.state,出于同样的原因,您最好使用useSelector() and useDispatch() hooks 而不是connect
  • 至于您的具体问题,您应该将您尝试的代码嵌入到沙箱的必要组件中,否则不太清楚应该点击什么以及预计会发生什么(此外,需要调度哪些操作)。
  • 嗨 Yevgen,我非常感谢您的意见,但是我对这一切都很陌生,我发现您的解释太先进了,我无法理解。我知道您不知道我是新手,我可能应该知道您使用的术语,但其中大部分我不理解。我非常感谢任何回应并利用他们的时间帮助他人的人

标签: reactjs onclick components hide


【解决方案1】:

我对您的代码进行了一些更改以使其正常工作。您可以根据需要进行进一步的更改。我想补充几点:-

  1. 您应该避免使用 findDOMNode(在大多数情况下 refs 可以解决您的问题),因为 findDOMNode 存在某些缺点,例如react's documentation states“findDOMNode 不能与功能组件一起使用”。 我使用了 refs(在这种情况下为 forward ref)来使其工作。

  2. GorillaSurfIn 被调用了两次,因此屏幕上有两个具有相同 ID 的 Gorilla gif。不确定这是否是预期的行为,但每个元素都应该有唯一的 ID。

  3. 查看code sandbox

【讨论】:

  • 嘿,感谢您的成功。您是否记得(或知道如何)我可以找出您在项目中还进行了哪些更改?除了 AddTodo?
  • 因为我更改了 AddTodo 和 GorillaSurfOut 中的代码,但 Gorilla 仍然没有消失,就像在您的代码沙箱中一样...
  • 这些是我的代码框中的行号: - AddTodo.js 1. 行号。 17(创建参考) 2. 行号。 31 (hideGorillaSurfIn 功能) 3. 行号43(评论额外呼叫 GorillaSurfIn) 4. 行号。 45(通过回调和clickHandler)此外,我还在GorillaSurf.js中进行了一些更改,并在myStyles.css中添加了CSS
  • 我没有注意到 CSS 部分。现在一切都变得更有意义了。完美的!非常感谢!
猜你喜欢
  • 2014-08-21
  • 1970-01-01
  • 2011-11-19
  • 2022-01-09
  • 2014-08-26
  • 2017-09-30
  • 2020-09-23
  • 2021-10-30
相关资源
最近更新 更多