[英]React Native complex conditional rendering design pattern
我的应用程序中有一条路线可能会根据传入的 state 有很大差异。 例如,假设我们有 3 个状态:state1、state2 和 state3。 在每种状态下都会呈现一些功能组件(例如 header 和页脚,但它们的内容可能会有所不同)。 我还有其他组件只能在 state1 中呈现,其他组件只能在 state2 中呈现,等等。
当前实现:目前,我将 state 传递给每个下游组件,并根据给定的 state 处理每个组件内部的条件渲染,通常使用 switch 语句。 我已经开始遇到这样一个问题,即添加另一个 state 或修改我想要为某个 state 呈现的内容变得既耗时又混乱。
选项一:我一直在考虑的第一个模式是为每个 state 创建不同的视图。 这些 state 特定视图将仅包括我希望为该特定 state 呈现的组件。 然后我可以将所有视图包装在一个更高阶的组件中,该组件将根据传递的 state 呈现正确的视图。 我觉得这个选项将是可扩展/可维护的,但是我认为它也会导致大量重复代码。 前任:
switch (currentState) {
case "state1":
return <State1Component />
case "state2":
return <State2Component />
...
}
State1Component 看起来像这样:
class State1Component extends Component {
state = {
headerText: "lorem ipsum",
componentText: "..."
...
}
render() {
return (
<View>
<Header headerText={headerText} />
...
</View>
)
}
}
第二个选项:我想到的另一个选项是创建一个单一的高级 object,其中包含每个不同 state 的每个下游组件所需的所有信息。 这个 object 将包含在主路由中。 例如,
stateObject = {
state1: {
header: {
renderComponent: true,
text: "Welcome to state1"
},
component1: {
renderComponent: false,
},
...
},
state2: {
...
}
...
}
现在,我可以根据传入的 state 轻松提取我需要的所有信息,并且可以通过 props 向下传递信息。 我觉得这个选项对于最小化重复代码很有用,但是我认为路由组件会因此变得忙碌/复杂。
我做了一个应用程序,情况类似,很多州,太麻烦了。 所以你在第二种方法中建议的更好。 拥有全局组件并根据您想要的 state 进行渲染总是好的。 假设您有 2 个状态并且想要显示 2 个不同的组件。
2.制作一个Home.js class,在其中跟踪state,并在其中导入上述两个组件并根据条件进行渲染:
import X from 'X.js'
import Y from 'Y.js'
class Home extends Component {
constructor(props){
super(props)
this.state={
state1:false,
state2:true
}
}
render(){
return(
<View>
{this.state.state1?<X />:<View />}
{this.state.state2?<Y />:<View />}
</View>
)
}
}
这不仅增加了代码的可读性,而且您实际上遵循了分解每个组件的分形文件夹结构。
随时提出任何疑问。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.