reactjs - 阻止所有组件渲染
问题描述
我有一个存储组件的变量,例如:
const list = {
components: [<ComponentOne key={1}/>, <ComponentTwo key={2}/>]
}
只有客户选择的组件会被渲染,其他没有选择的组件应该待机,但不能被销毁,因为当客户选择另一个时,它应该出现但不能重新构建。
但是当我从 ComponentOne 切换到 ComponentTwo 然后又回到 ComponentOne 时,它被重建并且我失去了在 ComponentOne 中已经完成的一切
有没有一种方法,当创建的组件没有被渲染时,它不会丢失所有的状态?
解决方案
我可以看到两个选项来实现你想要的:
- 管理组件外部的状态
- 渲染所有组件,但只显示当前组件
1.管理组件外的状态
列表中的所有组件部分都是无状态的(没有定义 useState 或 this.state),并且它们的状态将在外部管理并作为道具传递。
这可以通过在父组件中或在反应上下文中的状态来完成。
const [ state, setState ] = useState()
const list = {
components: [ComponentOne, ComponentTwo]
}
const CurrentComponent = list.components[index]
return <CurrentComponent state={state} setState={setState} />
2. 渲染所有组件,但只显示当前一个
这不是反应中最惯用的方法,但在大多数情况下应该可以工作。您的组件将具有一个 css 属性,display: none
但当前显示的属性除外display: block
(或者可见性:可见/隐藏)。
推荐阅读
- python - Python表格如何用bs4刮
- swift - 调用 .onNext(newArray) 时 RXSwift collectionView 不更新
- android - 如何从 Android Studio 的搜索结果中排除 SDK 文件?
- typescript - 离子角度的分页 API
- list - Dart Global 类返回 Null 列表
- java - 如何使用 webview 在 android 应用程序上获取我网站的所有功能?
- docker - 用户不是管理员,并且无权将主机绑定挂载用于资源
- spring-batch - Spring Batch - 读取两个 CSV 文件并进行比较
- javascript - 将 jQuery 与 kotlin 和 gradle 一起使用(JS 后端)
- android - react-native - 带有嵌套可滚动组件的 ios 和 android 之间的不同行为