我有2种类型的组件,例如a <Promo />和<Announcement />
<Promo />
<Announcement />
我的一个组件映射了一个项目列表并创建了促销或公告,我如何传递ItemElement,而不是必须基于if语句重复映射。
当前实施
import React, { Component } from 'react' import Promo from './Promo' import Announcement from './Announcement' class Demo extends Component { render() { const { ItemElement } = this.props let items = null if(ItemElement === 'Promo'){ items = this.props.items.map((p, i) => ( <Promo item={p} /> )) } else if(ItemElement === 'Announcement') { items = this.props.items.map((a, i) => ( <Announcement item={a} /> )) } return ( { items } ) } }
所需的实现不起作用
import React, { Component } from 'react' import Promo from './Promo' import Announcement from './Announcement' class Demo extends Component { render() { // this would be 'Promo' or 'Announcement' const { ItemElement } = this.props let items = this.props.items.map((p, i) => ( <ItemElement item={p} /> )) return ( { items } ) } }
如果我说了一个'div'or 'a'或'span'tag,但对我自己的组件不起作用,这可以正常工作吗?
'div'
'a'
'span'
您的render()方法需要返回一个元素。现在,您将返回一个具有单个属性的javascript对象:items。您需要将这些项目包含在顶级元素,另一个Component或DOM元素(<div>或<span>类似元素)中。
render()
items
<div>
<span>
至于将组件作为道具传递,则没有理由不应该这样做:
class Demo extends React.Component { render() { // this would be 'Promo' or 'Announcement' const { ItemElement } = this.props let items = this.props.items.map((p, i) => ( <ItemElement item={p} /> )) return <ul>{items}</ul>; } } class Promo extends React.Component { render() { return <li>Promo - {this.props.item}</li>; } } class Announcement extends React.Component { render() { return <li>Announcement - {this.props.item}</li>; } } const items = [ "foo", "bar" ]; ReactDOM.render( <Demo ItemElement={Promo} // <- try changing this to {Announcement} items={items} />, document.getElementById('app') );
这是一个jsbin演示:http ://jsbin.com/cakumex/edit?html,js,console,output