微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

reactjs在数组上迭代并在每个第n个元素上放置包装div

如何解决reactjs在数组上迭代并在每个第n个元素上放置包装div

我正在使用材料ui网格系统进行反应。我有一团json-并希望每第4个元素创建一行。因此,它每隔第4个元素包装一次容器-也能够控制第n个元素包装-因此,如果他们希望连续每隔2、3个元素进行配置,则可以对其进行配置。

类似的东西

HandMenuLayoutExamples

解决方法

将列表切片为子列表,然后在其上进行映射。

这里是您的整洁mapInSlices助手。

const posts = [1,2,3,4,5,6,7,8,9,10,11,12,13,14];

function mapInSlices(array,sliceSize,sliceFunc) {
  const out = [];
  for (var i = 0; i < array.length; i += sliceSize) {
    const slice = array.slice(i,i + sliceSize);
    out.push(sliceFunc(slice,i));
  }
  return out;
}

const App = () => (
  <main>
    {mapInSlices(posts,(slice) => (
      <div>
        {slice.map((post) => (
          <span>{post}</span>
        ))}
      </div>
    ))}
  </main>
);

ReactDOM.render(<App />,document.getElementById("root"));
div {
  border: 1px solid orange;
  padding: .5em;
  margin: .5em;
}

span {
  margin: 1em;
  padding: .5em;
  background: cyan;
  display: inline-block;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.13.1/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.13.1/umd/react-dom.production.min.js"></script>
<main id="root"></main>

,

您可以使用React.createElement实现这一目标

{
  blogJson.map((item,j) => {
    return React.createElement(
      j % 4 === 0 ? Grid : React.Fragment,j % 4 === 0 ? { container: true,spacing: 1 } : {},<Grid key={j} item xs={12} sm={3}>
        <Card className="blog-card">
          <CardContent>
            <img src={item.image} alt="" />
            <h3>{item.label}</h3>
            {item.body}
          </CardContent>
          <CardActions>
            <IconButton aria-label="add to favorites">
              <FavoriteIcon className="icon-heart" />
            </IconButton>
          </CardActions>
        </Card>
      </Grid>
    )
  })
}

Edit sparkling-wind-cw1pg

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。