我想呈现一个简单的列表,但似乎react无法呈现未封闭的推送html元素。 但这会导致错误
ReferenceError:未定义el
如果使用简单的引号(')
bookingStatusList.push('<div className="select"><select id="department">');
错误消失了,但是<div>
和<select>
html呈现为文本而不是html标签(<option>
正确呈现了)
render()
{
const {bookingStatus} = this.state;
const bookingStatusList = [];
if(bookingStatus.length)
{
bookingStatusList.push(<div className="select"><select id="department">);
bookingStatus.map(el => {
bookingStatusList.push (
<option value={el.id} key={el.id}>
{el.name}
</option>
)
})
bookingStatusList.push(</select></div>)
}
else
{
bookingStatusList.push('<div>LOADING</div>')
}
return (
<div>
{bookingStatusList}
</div>
);
}
答案 0 :(得分:2)
JSX语法看起来类似于HTML,但不是HTML。它被转换为JavaScript,可以显式创建元素并且不处理标签。
所以,不,你不能那样做。
将代码内翻。
const list_of_options = bookingStatus.map(etc etc);
const div = <div><select>{list_of_options}</select></div>;
答案 1 :(得分:1)
别忘了,我们编写的JSX不是HTML,它将转换为js。因此,您需要稍微重构代码,在数组上循环并创建所有选项,然后将该变量放入jsx。
检查Doc了解更多详细信息。
这样写:
render() {
const { bookingStatus } = this.state;
let bookingStatusList, options = [];
if(bookingStatus.length) {
bookingStatus.map(id => {
options.push(
<option value={el.id} key={el.id}>
{el.name}
</option>
)
})
bookingStatusList = (
<div className="select">
<select id="department">
{options}
</select>
</div>
);
}
else {
bookingStatusList = <div>LOADING</div>;
}
return (
<div>
{bookingStatusList}
</div>
);
}