gpt4 book ai didi

reactjs-flux - 如何删除/卸载嵌套的 react 组件

转载 作者:行者123 更新时间:2023-12-03 13:31:05 28 4
gpt4 key购买 nike

我想卸载单个 react 组件,该组件属于总共包含三个组件的父组件。父组件有这个渲染函数:

render: function () {
return (
<div className={classes}>
<Navbar ref="navbar"/>
<Home ref="home"/>
<Footer ref="footer"/>
</div>
),

handleNavbarClick: function () {
// remove Home
}

如果用户单击导航栏中的链接并且我想卸载主页组件,我该怎么做?似乎我唯一的选择是做这样的事情(取自 react.js: removing a component ),但这看起来很恶心:

render: function () {
var home = this.state.remove_home ? null : <Home ref="home />
return (
<div className={classes}>
<Navbar ref="navbar"/>
{home}
<Footer ref="footer"/>
</div>
),

handleNavbarClick: function () {
this.setState({remove_home: true});
}

这是正确的 react 方式吗?

最佳答案

是的,您提出的解决方案

render: function () {
var home = this.state.remove_home ? null : <Home ref="home" />
return (
<div className={classes}>
<Navbar ref="navbar"/>
{home}
<Footer ref="footer"/>
</div>
),

handleNavbarClick: function () {
this.setState({remove_home: true});
}

或多或少是用 React 处理这个问题的“正确”方法。请记住,渲染的目的是描述组件在任何给定点的外观方式。接触 DOM 并执行手动操作,或执行其他类型的命令式工作(例如“删除”元素)几乎总是错误的做法。

如果您担心语法,可以考虑内联或提取逻辑:

render: function () {
return (
<div className={classes}>
<Navbar ref="navbar"/>
{this.state.remove_home ? null : <Home ref="home" />}
<Footer ref="footer"/>
</div>
),

render: function () {
return (
<div className={classes}>
<Navbar ref="navbar"/>
{!this.state.remove_home && <Home ref="home" />}
<Footer ref="footer"/>
</div>
),

render: function () {
return (
<div className={classes}>
<Navbar ref="navbar"/>
{this.renderHome()}
<Footer ref="footer"/>
</div>
),

renderHome: function() {
if (!this.state.remove_home) {
<Home ref="home" />
}
}

关于reactjs-flux - 如何删除/卸载嵌套的 react 组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30447767/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com