使用React,我如何基于类型呈现组件
Using React, how do I render components based on a type?
假设我有一个Posting
组件列表,可以是汽车,卡车或船的类型。
渲染每种类型的帖子的道具是相同的,只是布局不同。
我应该为每个类型创建一个单独的组件吗?(CarPosting, TruckPosting),然后根据type
道具渲染正确的一个,或者我应该对Posting
组件中的每种类型都有一个部分渲染方法,然后我从主渲染方法切换和调用?
您应该为每个posting
设置一个单独的组件,然后包装器组件应该决定渲染哪个内部组件。
内部组件
你应该为每种类型(CarPosting
, TruckPosting
…)都有一个单独的组件。这些组件不应该有type
属性,因为当它们被渲染时,渲染者应该知道它们是否为CarPosting
。
prop
名称,仅凭这一点并不能证明使用继承是合理的。事实上,在大多数情况下,React组件不需要继承。有一些方法可以在没有继承的情况下在组件之间共享行为,比如使用Mixins或简单地共享一些JS模块。
包装器组件
现在,包装器组件应该根据子组件的类型确定要呈现哪些子组件。
是的,您可以执行switch
并选择该switch
中的组件。如果你只有2或3个组件类型,你不太关心可扩展性,这是可以接受的。
然而,更复杂的解决方法是使用ComponentFactory
,其中注册type
和组件,像这样:
// the first parameter is the type, the second is the Component
componentFactory.register("car", CarPosting);
componentFactory.register("boat", BoatPosting);
componentFactory
可以有一个buildComponent
方法接受props,并根据您注册的内容将props重新传递给组件的新实例。
的例子:
componentFactory.buildComponent("boat", someBoatProps)
现在,可以从包装器组件调用componentFactory
为您生成组件。这样的:
// this is inside the render method
<div>
{
postings.map(posting => componentFactory.buildComponent(posting.type, someOtherProps))
}
</div>
相关文章:
- 组件类型角度指令 ng 模板
- React 组件流类型检查中的可选函数属性失败
- 嵌入 API 自定义组件:未捕获类型错误:无法读取未定义的属性“ViewSelector2”
- 如何访问 enyo 类型的儿童组件
- 未捕获的错误:不变冲突:元素类型无效:需要字符串(对于内置组件)或类/函数,但得到:对象
- React dnd-不确定如何为相同类型的嵌套组件启用拖放
- react router问题未捕获错误:不变冲突:元素类型无效:应为字符串(用于内置组件)
- ReactJS组件PropTypes——用一组参数指定一个函数类型
- React无状态功能组件的流返回类型是什么?
- 另一个组件中的组件测试类型
- ReactJS: '类型未定义'加载组件时
- 从react组件'数组类型状态属性弹出的正确方式
- 类型错误在谷歌分析图表web组件
- 在React组件中需要特定类型的子组件
- 查找所有类型为reactjs的组件
- 使用React,我如何基于类型呈现组件
- 如何允许输入类型=file在react组件中选择相同的文件
- 类型转换:组件到RadioButtonStyle
- 如何声明React.来自外部模块的组件类型,具有单独的声明文件
- 在角度预类型组件中解析数据不起作用