将未封闭的html元素呈现到数组中

时间:2019-04-09 12:14:47

标签: javascript reactjs

我想呈现一个简单的列表,但似乎react无法呈现未封闭的推送html元素。 但这会导致错误

  

ReferenceError:未定义el

如果使用简单的引号(')

bookingStatusList.push('<div className="select"><select id="department">');

错误消失了,但是<div><select> html呈现为文本而不是html标签(<option>正确呈现了)

enter image description here 这是我的代码

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>
        );
    }

2 个答案:

答案 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>
    );
}