dco*_*ran 5 reactjs react-jsx reactjs-flux
我想卸载一个反应组件,它属于一个包含三个组件的父组件.父组件具有此渲染功能:
render: function () {
return (
<div className={classes}>
<Navbar ref="navbar"/>
<Home ref="home"/>
<Footer ref="footer"/>
</div>
),
handleNavbarClick: function () {
// remove Home
}
Run Code Online (Sandbox Code Playgroud)
如果用户然后单击导航栏中的链接并且我想要卸载Home组件,我该怎么做?似乎我唯一的选择是做这样的事情(取自react.js:删除一个组件),但这似乎非常严重:
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});
}
Run Code Online (Sandbox Code Playgroud)
这是做适当的反应方式吗?
是的,您提出的解决方案
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});
}
Run Code Online (Sandbox Code Playgroud)
或多或少是用 React 处理这个问题的“正确”方法。请记住, 的目的是描述您的组件在任何给定点上render的查看方式。接触 DOM 并执行手动操作,或执行其他类型的命令性工作(例如“删除”元素)几乎总是错误的做法。
如果您担心语法,可以考虑内联或提取逻辑:
render: function () {
return (
<div className={classes}>
<Navbar ref="navbar"/>
{this.state.remove_home ? null : <Home ref="home" />}
<Footer ref="footer"/>
</div>
),
Run Code Online (Sandbox Code Playgroud)
或者
render: function () {
return (
<div className={classes}>
<Navbar ref="navbar"/>
{!this.state.remove_home && <Home ref="home" />}
<Footer ref="footer"/>
</div>
),
Run Code Online (Sandbox Code Playgroud)
或者
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" />
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12054 次 |
| 最近记录: |