javascript - 在 React 组件安装中提高性能的更高效方式
问题描述
我Modals
在 React 中做了很多。
我找到了两种制作方法Modal
。
第一个是这样的
class Modal extends React.Component {
componentDidMount(){ console.log('DidMount') };
componentDidUpdate(){ console.log('DidUpdate') };
componentWillUnmount(){ console.log('WillUnmount') };
render(){
return (
<React.Fragment>
<div className="overlay" />
<div className="Modal>
This is Modal.
</div>
</React.Fragment>
)
}
}
class App extends React.Component {
state = {
isModalOpen: false
}
toggleModal = () => this.setState({ isModalOpen: !this.state.isModalOpen })
render(){
return (
<div className="App">
<button onClick={this.toggleModal}>Toggle</button>
{ this.state.isModalOpen ? <Modal /> : null }
</div>
)
}
}
这个重复componentDidMount()
&componentWillUnmount()
当状态改变时。
让我们看看另一个。
class Modal extends React.Component {
componentDidMount(){ console.log('DidMount') };
componentDidUpdate(){ console.log('DidUpdate') };
componentWillUnmount(){ console.log('WillUnmount') };
render(){
return (
<React.Fragment>
{ props.isOpen ? <div className="overlay" /> : null }
{ props.isOpen ? <div className="Modal">This is Modal</div> : null }
</React.Fragment>
)
}
}
class App extends React.Component {
state = {
isModalOpen: false
}
toggleModal = () => this.setState({ isModalOpen: !this.state.isModalOpen })
render(){
return (
<div className="App">
<button onClick={this.toggleModal}>Toggle</button>
<Modal isOpen={this.state.isModalOpen} />
</div>
)
}
}
这个就不叫了componentWillUnmount()
。
componentDidUpdate()
当状态改变时它会调用。
我想知道哪一个是更好的表演方式或其他方式。
先感谢您。
解决方案
你的问题有点令人困惑,但我会尝试澄清一些事情。
关于您的评论:这个人不会打电话componentWillUnmount()
。它不会调用该cWU()
方法,因为您总是在渲染中使用它来渲染它<Modal isOpen={this.state.isModalOpen} />
。现在无论它是否基于您的isOpen
道具出现,这是一个不同的问题。另一方面,如果你有类似的东西{isThisPropertyTrue ? <Modal isOpen={this.state.isModalOpen} /> : null}
,并且你isThisPropertyTrue
的从真到假切换,那么你会注意到console.log
你的卸载钩子中的 。此方法{ this.state.isModalOpen ? <Modal /> : null }
具有更好的性能,因为模态是根据请求呈现的。
推荐阅读
- jquery - 在 Angular 8 中使用 metismenu,第二级导航无法在移动尺寸屏幕中打开
- javascript - javascript for循环不使用react js递增
- sql - Django优化递归查询
- java - 如何重新显示和恢复先前添加的片段及其视图到容器
- javascript - 如何通过查找父 ID 和子 ID nodejs 来更新数组中的字段
- git - 如何在当前分支中添加提交以将内容更改为另一个分支中的特定提交
- reactjs - 功能组件的主体与 componentDidMount
- git - 由于 master.lock 无法推送我的提交
- javascript - 如何从下拉列表复选框中删除所选项目
- ios - 如何从 Xcode(swift) 中从数据库中获取数据