渲染未关闭的 html 元素推入数组

IT技术 javascript reactjs
2021-05-14 16:50:11

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

参考错误: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>
        );
    }
2个回答

JSX 语法看起来像 HTML,但它不是 HTML。它被转译为显式创建元素且不处理标签的 JavaScript。

所以,不,你不能那样做。

把你的代码翻过来。

const list_of_options = bookingStatus.map(etc etc);
const div = <div><select>{list_of_options}</select></div>;

别忘了,我们写的是 JSX 而不是 HTML,它会被转译成 js。所以你需要稍微重构你的代码,循环遍历数组并创建所有选项,然后将该变量放入 jsx 中。

查看文档了解更多详情。

像这样写:

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