javascript - 有条件地在 3 个元素后添加一行:ReactJS
问题描述
我想渲染几行,每行包含三列。这些列只有一个Card
. 我认为我可以做到这一点的方法是通过元素并在模数为 0时map
创建一个并在它是该行的第三列时关闭它。我尝试过使用语句和三元运算符。但我不断收到语法错误。row
index
row
if-else
render(){
var { isLoaded, items } = this.state;
if(!isLoaded) {
return (<div> Fetching items </div>);
}
else {
var results = items.results;
return (
<div className="App">
<div className ="container">
{ result.map ((result, i) => {
return(
{i%3===0 ?
<div className ="row mt-4">
<div key ={i} className="col-md-4">
<Card result={result}></Card>
</div>
:
<div key ={i} className="col-md-4">
<Card result={result}></Card>
</div>);
}
{i%3===1 ?
</div>
:null}
})}
</div>
</div>
);
}
}
使用这段代码,我在这一行中遇到错误
{i%3===0 ?
我该如何解决这个问题?
解决方案
因为,您有一个<div>
无效的 JSX 未闭合标签,这也{
意味着对象不是动态内容。
别忘了我们写的是JSX,而不是 html。每个标签都需要正确关闭,因为它会被转换为React.createElement(component/html tag, props, children)
.
要解决这个问题,首先准备数组,在 3 项之后,只需将元素压入行数组中,如下所示:
renderRows() {
let results = items.results;
let finalArr = [], columns = [];
result.forEach ((result, i) => {
// prepare the array
columns.push(
<div key ={i} className="col-md-4">
<Card result={result}></Card>
</div>
);
// after three items add a new row
if((i+1) % 3 === 0) {
finalArr.push(<div className ="row mt-4">{columns}</div>);
columns = [];
}
});
return finalArr;
}
render(){
var { isLoaded, items } = this.state;
if(!isLoaded) {
return (<div> Fetching items </div>);
} else {
return (
<div className="App">
<div className ="container">
{this.renderRows()}
</div>
</div>
);
}
}
推荐阅读
- bootstrap-modal - React-Bootstrap Modal 移动尺寸有额外的空白
- docker - 从 Docker 容器运行 docker-compose
- javascript - AngularJS 指令在使用 $.get 加载动态内容后编译
- laravel - SQLSTATE[08006] 超时过期
- c# - 使用 netcore 2.2 运行“dotnet Myapp.dll”时覆盖 applicationUrl
- nginx - Nginx 入口 OAuth 注销(Kubernetes)?
- terminology - 解释回归输出:股票指数百分比与基点变化
- java - 如何在放心的测试用例中重用 oauth2 令牌
- list - Azure Cosmos 查询转换为列表
- html - Bootstrap 4 导航栏在编码过程中丢失了背景