【问题标题】:render DIV in react app在反应应用程序中渲染 DIV
【发布时间】:2018-08-31 15:58:02
【问题描述】:

嗨。一个任务:

我从服务器得到一个包含帖子的数组。并返回它:

{ this.state.articles.map((article) => {
return ( <div className={css(styles.feed_row)}>
  <div key={article.id} className={ css(boxes.art_box) }>
    <span className={css(boxes.cover)}>
      <img  src={article.art_cover} alt="" width={350}/>
    </span>
  </div>
</div> )
}

在出去的路上,我会得到一个包含许多帖子的 div。

但是如何限制每个.feed_row,只有两个元素,或者,达到最大宽度后,自动创建一个新的.feed_row和继续添加帖子吗?

我正在尝试得到这样的东西:

【问题讨论】:

  • 您可以插入换行符(有点复杂),或者将&lt;div&gt;s 设置为display: inline-block;,这样只要有足够的空间,它们就会彼此相邻,然后环绕。
  • 我不需要样式,只需要渲染函数。帖子数量可能不同
  • 你在问如何每行有多个 div 吗?
  • 每个父节点的最大宽度为 750,子节点的最大宽度可以不同。最宽也是750
  • 如何每行放置不超过两个))

标签: javascript html reactjs


【解决方案1】:

以下是如何将一维数组转换为所需的二维一:

function articleRows(articles, max, maxWidth) {
  var rows = [];
  var currentRow = [];
  const fits = a => currentRow.reduce((acc, curr) => acc + curr.width, 0) + a.width <= maxWidth;
  articles.forEach(a => {
    if (currentRow.length < max && fits(a)) return currentRow.push(a);
    rows.push(currentRow);
    currentRow = [a];
  });
  rows.push(currentRow);
  return rows;
}

var articles = [];
for (var i = 0; i < 10; i++) {
  articles.push({
    width: Math.ceil(Math.random() * Math.random() * 4) * 150 + 150
  });
}

var rows = articleRows(articles, 2, 750);

console.log(articles.map(a => a.width));
console.log(rows.map(row => row.map(a => a.width).join(", ")));

基本思想是创建一个空行数组,只要合适就推送到它,然后移动到下一行。

这是一个展示最终结果的 React 沙箱:https://codesandbox.io/s/pmopkvwkq7

【讨论】:

  • 是的,它似乎有效。但是还有一个问题。您最初设置了宽度。在我看来 - 风格是从帖子类型开始的,并且是百分比。怎么办?
猜你喜欢
  • 2018-01-08
  • 1970-01-01
  • 2018-04-20
  • 2023-03-15
  • 2019-10-28
  • 1970-01-01
  • 1970-01-01
  • 2021-06-15
  • 2020-03-01
相关资源
最近更新 更多