ReactDOM 未呈现
ReactDOM is not rendering
<div class='row m-b-0'>
<div class="col-sm-6 col-md-4">...</div>
<div class="col-sm-6 col-md-4">...</div>
<div class="col-sm-6 col-md-4">...</div>
</div>
I am used to using jQuery when I implement like jQuery inside reactjs but in react can not render.
下面是我的代码。
我该如何解决?
render(){
let tag1 = '';
let tag2 = '';
const wrapper = (value,i) => {
if(i === 1 || i === 4 || i === 7 || i === 10 || i === 13){
tag1 = "<div class='row m-b-0'>";
} else {
tag1 = '';
}
if(i === 3 || i === 6 || i === 9 || i === 12 || i === 15){
tag2 = "</div>";
} else {
tag2 = '';
}
return (<Content data={i} value={value} tag1={tag1} tag2={tag2} />)
}
return(
<Fragment>
{
this.state.data.map((value,i) =>
wrapper(value,i)
)
}
</Fragment>
)
}
}
const Content = (props) => {
return(
<Fragment key={props.data}>
{
props.tag1
}
...
{
props.tag2
}
</Fragment>
)
}
可以在反应中呈现 'raw html'(f.e.dangerouslySetInnerHTML 或片段)但是使用反应来粘合 strings/html 部分是一个不好的做法。
React 创建(虚拟)节点(片段)有限制 - 我恐怕它不能包含在另一个节点中打开和关闭的标签。
您必须构建更接近要求的组件 html。在这种情况下(您没有显示数据结构),我会将数据分为 3 个元素集 returning complete ('row') structure/fragment 一步完成:
return (
<div class='row m-b-0' key={i}>
<div class="col-sm-6 col-md-4">{subset[0]}/div>
<div class="col-sm-6 col-md-4">{subset[1]}/div>
<div class="col-sm-6 col-md-4">{subset[2]}/div>
</div>
)
然后你可以进一步重构:
return (
<div class='row m-b-0' key={i}>
{subset.map((value,i) => (
<div class="col-sm-6 col-md-4" key={i}>{value}</div>
)}
</div>
)
以后
return (
<div class='row m-b-0' key={i}>
{subset.map((value,i) => renderCell(value,i) )}
/div>
)
并可能制作 Cell 组件
return (
<Row ...props.rowProps key={i}>
{subset.map((value,i) => <Cell value={value} i={i} ...props.cellProps/> )}
</Row>
)
或者如果您需要简单的条件深度
if(!!props.someCond) return (
<Row ...props.rowProps key={i}>
{subset.map((value,i) => <Cell value={value} i={i} ...props.cellProps/> )}
</Row>
}
return (
<Fragment key={i}>
{subset.map((value,i) => <Cell value={value} i={i} ...props.cellProps/> )}
</Fragment>
}
或者在 JSX 中,比如:
return (
{!!props.someCond ?
<Row ...props.rowProps key={i}>
: <Fragment key={i}>}
{subset.map((value,i) => <Cell value={value} i={i} ...props.cellProps/> )}
{!!props.someCond ? </Row> : </Fragment> }
)
从某个时候起,您可以 return 多个节点,这样的事情应该可以工作:
return (
{!!props.someCond && <Row ...props.rowProps key={i}>}
{subset.map((value,i) => <Cell value={value} i={i} ...props.cellProps/> )}
{!!props.someCond && </Row> }
)
有很多可能性,但您必须 'think in react',更结构化的方式 ;)
PS。使用模运算符简化条件
const openingTag = (i>0 && (i % 3 === 1)); // 1,4,7...
const tag1 = openingTag ? `<div class='row m-b-0'>` : null; // null renders nothing in react
在 jsx 中准备好布尔值后,您可以:
{openingTag && <div class='row m-b-0'>}
但如果不关闭它可能无法工作 - 将它用于整个组件或(结构化)块。
<div class='row m-b-0'>
<div class="col-sm-6 col-md-4">...</div>
<div class="col-sm-6 col-md-4">...</div>
<div class="col-sm-6 col-md-4">...</div>
</div>
I am used to using jQuery when I implement like jQuery inside reactjs but in react can not render.
下面是我的代码。
我该如何解决?
render(){
let tag1 = '';
let tag2 = '';
const wrapper = (value,i) => {
if(i === 1 || i === 4 || i === 7 || i === 10 || i === 13){
tag1 = "<div class='row m-b-0'>";
} else {
tag1 = '';
}
if(i === 3 || i === 6 || i === 9 || i === 12 || i === 15){
tag2 = "</div>";
} else {
tag2 = '';
}
return (<Content data={i} value={value} tag1={tag1} tag2={tag2} />)
}
return(
<Fragment>
{
this.state.data.map((value,i) =>
wrapper(value,i)
)
}
</Fragment>
)
}
}
const Content = (props) => {
return(
<Fragment key={props.data}>
{
props.tag1
}
...
{
props.tag2
}
</Fragment>
)
}
可以在反应中呈现 'raw html'(f.e.dangerouslySetInnerHTML 或片段)但是使用反应来粘合 strings/html 部分是一个不好的做法。
React 创建(虚拟)节点(片段)有限制 - 我恐怕它不能包含在另一个节点中打开和关闭的标签。
您必须构建更接近要求的组件 html。在这种情况下(您没有显示数据结构),我会将数据分为 3 个元素集 returning complete ('row') structure/fragment 一步完成:
return (
<div class='row m-b-0' key={i}>
<div class="col-sm-6 col-md-4">{subset[0]}/div>
<div class="col-sm-6 col-md-4">{subset[1]}/div>
<div class="col-sm-6 col-md-4">{subset[2]}/div>
</div>
)
然后你可以进一步重构:
return (
<div class='row m-b-0' key={i}>
{subset.map((value,i) => (
<div class="col-sm-6 col-md-4" key={i}>{value}</div>
)}
</div>
)
以后
return (
<div class='row m-b-0' key={i}>
{subset.map((value,i) => renderCell(value,i) )}
/div>
)
并可能制作 Cell 组件
return (
<Row ...props.rowProps key={i}>
{subset.map((value,i) => <Cell value={value} i={i} ...props.cellProps/> )}
</Row>
)
或者如果您需要简单的条件深度
if(!!props.someCond) return (
<Row ...props.rowProps key={i}>
{subset.map((value,i) => <Cell value={value} i={i} ...props.cellProps/> )}
</Row>
}
return (
<Fragment key={i}>
{subset.map((value,i) => <Cell value={value} i={i} ...props.cellProps/> )}
</Fragment>
}
或者在 JSX 中,比如:
return (
{!!props.someCond ?
<Row ...props.rowProps key={i}>
: <Fragment key={i}>}
{subset.map((value,i) => <Cell value={value} i={i} ...props.cellProps/> )}
{!!props.someCond ? </Row> : </Fragment> }
)
从某个时候起,您可以 return 多个节点,这样的事情应该可以工作:
return (
{!!props.someCond && <Row ...props.rowProps key={i}>}
{subset.map((value,i) => <Cell value={value} i={i} ...props.cellProps/> )}
{!!props.someCond && </Row> }
)
有很多可能性,但您必须 'think in react',更结构化的方式 ;)
PS。使用模运算符简化条件
const openingTag = (i>0 && (i % 3 === 1)); // 1,4,7...
const tag1 = openingTag ? `<div class='row m-b-0'>` : null; // null renders nothing in react
在 jsx 中准备好布尔值后,您可以:
{openingTag && <div class='row m-b-0'>}
但如果不关闭它可能无法工作 - 将它用于整个组件或(结构化)块。