使用 .map 渲染多个 React 组件
Rendering Multiple React Components with .map
这可能是
一个完整的菜鸟问题,但我很难弄清楚这一点。 我有一个 React 组件,在其渲染方法中,我想渲染一些动态传入的组件(通过 props)。
这是我从渲染方法(ES6,用 Babel 转译)返回的
return (
<div className={openState}>
/* Shortened for brevity*/
{this.props.facets.map(function(f) {
var CompName = facetMap[f.type]
return <CompName key={f.id} />
})}
/* Shortened for brevity*/
</div>
)
facetMap
只是一个映射,用于将字符串与传入的"类型"匹配。 我似乎无法让组件实际呈现在页面上。
我将 .map() 方法的结果存储在 var 中,然后将其记录到控制台,它显示了一组组件。 但是,渲染方法中的{facetComponents}
具有相同的结果。
编辑,对于那些对解决方案感兴趣的人
因为我真的在任何地方都找不到答案,这是我完整的解决方案,感谢@Mathletics
//Components imported using ES6 modules
import OCFacetText from "./oc-facet-text"
// Etc...
//Later on, in my render method:
let facetMap = {
"text": OCFacetText,
"number": OCFacetNumber,
"numberrange": OCFacetNumberRange,
"boolean": OCFacetBoolean,
"checkbox": OCFacetCheckbox,
// Etc, etc...
}
let facetComps = facets.map(function(f) {
var CompName = facetMap[f.type]
return <CompName key={f.id} />
})
//Finally, to render the components:
return (
<div className={openState}>
/* Shortened for brevity*/
{facetComps}
/* Shortened for brevity*/
</div>
)
据我所知,听起来您的facetMap
是字符串的集合:
var facetMap = {text: 'OCFacetText'}
但它实际上应该返回组件类:
var OCFacetText = React.createClass({...});
var facetMap = {text: OCFacetText};
然后(也只有这样)您将需要使用 createElement
方法来动态构造组件:
var CompName = facetMap[f.type]; // must be a FUNCTION not a string
return React.createElement(CompName, {key: f.id}) />
烦人的一个。
如果你想要动态组件名称,你必须使用React.createElement(CompName)
,其中 CompName 是一个字符串或类对象。
默认情况下,react 会在上面的例子中查找一个名为 CompName
的组件。
所以你的渲染函数看起来像这样:
return (
<div className={openState}>
/* Shortened for brevity*/
{this.props.facets.map(function(f) {
var CompName = facetMap[f.type]
return React.createElement(CompName, {key: f.id}) />
})}
/* Shortened for brevity*/
</div>
)
相关文章:
- React组件等待所需道具进行渲染
- React组件-设置页面标题
- 为react组件传递道具的最佳方式
- react组件中的绑定方法
- 加载服务器端渲染的React组件后执行脚本
- 如何基于依赖性导入React组件
- 可以't在我的React组件中加载图像
- jsx-React组件中的格式化编号
- 在进行服务器端渲染时,我可以向客户端发送React组件吗
- 使用jquery在react组件内部设置样式可以吗
- 为什么我不能将键映射到 React 组件上
- webpack样式加载器-在react组件上导入不同的样式,而无需重写
- 无法将react组件作为属性传递给另一个组件
- 继承React组件的正确方式
- 在JSX中围绕React组件封装高阶组件(HOC)
- 根据React组件的名称渲染该组件
- react组件的正确命名规范
- 在另一个文件夹中显示React组件
- AJAX 请求没有在我的 React 组件中设置 this.state.data
- 有没有一条清晰的路径,我可以实现一个在 ScalaJS + React 中广泛使用上下文的 React 组件