Cố gắng hiển thị các thành phần khác nhau tùy thuộc vào đối số được truyền với dữ liệu. Nếu tôi sử dụng Regular hoặc React.createElement (Item) - nó hoạt động tốt, nhưng tất cả các tùy chọn khác đều thất bại.Tạo thành phần phản ứng động
http://jsfiddle.net/zeen/fmhhtk5o/1/
var React = window.React;
var data = {items: [
{ itemClass: 'Item', id: 1, contentsHTML: '', text: 'Item 1'},
{ itemClass: 'Item', id: 2, contentsHTML: '', text: 'Item 2'},
{ itemClass: 'Item', id: 3, contentsHTML: '', text: 'Item 3'},
{ itemClass: 'Item', id: 4, contentsHTML: '', text: 'Item 4'},
{ itemClass: 'Item', id: 5, contentsHTML: '', text: 'Item 5'}
]};
var MyCatalog = React.createClass({
getInitialState: function() {
return { data: { items: [] } };
},
componentDidMount: function() {
this.setState({ data: this.props.data });
},
render: function() {
return (
<div className="catalog">
HELLO!!! I AM A CATALOG!!!
<ItemList data={this.state.data}/>
</div>
);
}
});
var ItemList = React.createClass({
render: function() {
console.log(this.props);
var items = this.props.data["items"].map(function (itemData) {
var klass = itemData['itemClass'] || 'Item';
var ItemFactory = React.createFactory(klass);
//return <ItemFactory key={itemData['id']} data={itemData}/> // no
//return <klass key={itemData['id']} data={itemData}/> // no
//return React.createElement(klass, { key: itemData['id'], data: itemData }); // no
//return <Item data={itemData}/> // ok
//return React.createElement(Item, { data: itemData }); // ok
//return React.createElement('Item', { key: itemData['id'], data: itemData }); // no
//return React.createElement(React.createFactory('Item'), { data: itemData }); // no, error
var component = Components['itemClass'];
return <component data={itemData} key={itemData['id']}/>
});
console.log(items);
return (
React.createElement('div', { className: 'list' },
React.createElement('div', null, 'And I am an ItemList :'),
React.createElement('div', null,
items
)
)
/*<div className="list">
<div>And I am an ItemList :</div>
<div>
{items}
</div>
</div>*/
);
}
});
var Item = window.Item = React.createClass({
render: function() {
return (
<div className="item">
<div>
Regular item. Nothing special.
</div>
{this.props.children}
</div>
);
}
});
var Components = {
'Item': Item
};
React.render(
<MyCatalog data={data}/>,
document.getElementById('app')
);
Làm thế nào tôi có thể quản lý trường hợp này với nhiều loại khác nhau của các thành phần?
gì đang ngăn cản bạn từ việc sử dụng ký hiệu JSX trong 'bạn ItemList'? –
Khi bạn nói "được truyền dưới dạng dữ liệu", điều đó có nghĩa là giá trị this.props. {PropertyName] không? Tại sao không chỉ gắn bó với việc sử dụng this.props.children và truyền chúng vào như các nút con - Đó là sau khi tất cả một tài sản. Hoặc xác định một số loại thành phần có thể và sau đó trả lại một biến là một thành phần bên trong một swicth –
@ E_net4 như bạn có thể thấy tôi đã sử dụng JSX, nhưng nó không hoạt động – Dmytro