鉴于数据源是多种数据类型,我是 React 和 JSX 的新手,并且坚持如何呈现项目列表。
我的数据源(棱镜)返回一个数据数组,所有不同的类型,每个代表一个 html 标记例如来自服务器的数据是:
heading3 (h3)
paragraph (p)
list-item (li for ul)
list-item (li for ul)
list-item (li for ul)
paragraph (p)
o-list-item (li for ol)
o-list-item (li for ol)
paragraph (p)
我想将其转换为有效的 HTML,插入返回的数据。
E.g. heading3 will render <h3>heading_text</h3>
数据不包含列表的开始和结束标记的条目,因此我需要在列表开始和结束时插入它们。
我的第一次尝试是做这样的事情:
renderSectionText(alltextdata) {
let texthtml = [];
let listopen = false;
alltextdata.map((text, index) => {
switch (text.type) {
case "heading3":
//if a ul/ol started, end one (insert a closing ul/ol tag)
if(listopen){
texthtml.push(</ul>)
listopen = false;
}
texthtml.push(<h3 key={index}>{text.text}</h3>);
break;
case "paragraph":
if(listopen){
texthtml.push(</ul>)
listopen = false;
}
//if a ul/ol started, end one (insert a closing ul/ol tag)
texthtml.push(<p key={index}>{text.text}</p>);
break;
case "list-item":
//if no ul/ol started, start one (insert an opening ul/ol tag)
if(listopen === false){
texthtml.push(<ul>)
listopen = true;
}
texthtml.push(<li key={index}>{text.text}</li>);
break;
default:
console.log(text.type);
return;
}
})
return texthtml;
}
但是,在 React (AFAIK) 中,不可能在没有结束标签的情况下输入标签。即这给了我一个 JSX 语法错误
case "list-item":
//if no ul/ol started, start one
if(listopen === false){
texthtml.push(<ul>); //error here
listopen = true;
}
texthtml.push(<li key={index}>{text.text}</li>);
break;