当前位置: 首页 > 面试题库 >

react.js每第n个项目添加开始标记或结束标记

陶朝明
2023-03-14
问题内容

我在使用此逻辑时遇到麻烦,因为react / jsx不允许将非结束标记添加到数组/子组件。例如,使用bootstrap CSS,我想为
4列添加一行。

因此逻辑如下:

添加一个开头行ex:,<div className="row">然后在该行内循环,并在每个循环后添加一列ex:<div className="column>{this.data}</div>当该循环达到4时,在添加新的行标记时检查if(i % 4 == 0)并添加一个结束</div>标记<div className="row">

下面的代码 _ 可以_ 用另一种语言工作,但是由于我们按下了结束标记和开始标记(这是无效的jsx),因此这是不可行的:

generateColumns(columns) {
 let newColumns = [];

 columns.forEach(function(column, idx) {
  newColumns.push( <div className="column"> some data </div> );

  if (idx % 4 == 0) {
   // Here we end the row and start a new row, works in any other language.
   newColumns.push( </div> <div className="row"> );
  }
 });

 // This array now has the proper tags for opening a row every 4th item and closing it.
 return newColumns;
},
render() {
   return (
     <div className="row">
       {this.generateColumns(this.props.columns)}
     </div>
   )
}

预期的输出将是:

<div class="row">
  <div class="column">
   Some data
  </div>
  <div class="column">
   Some more data
  </div>
  <div class="column">
   Other data
  </div>
  <div class="column">
   Something else
  </div>
</div>
<div class="row">
  <div class="column">
   Some data
  </div>
  <div class="column">
   Some more data
  </div>
  <div class="column">
   Other data
  </div>
  <div class="column">
   Something else
  </div>
</div>

//the above would be repeated and new rows would appear every 4 columns.


问题答案:
render() {
   const rows = array_chunk(this.props.columns, 4)
   return (
     {
       rows.map((row) => (
         <div className="row">
         {
           row.map((col) => (
             <div className="col">{ col }</div>
           ))
         }
         </div>
       ))
     }
   )
}

一个array_chunk示例(我建议您使用lodash)

module.exports = function chunks(arr, size) {
  if (!Array.isArray(arr)) {
    throw new TypeError('Input should be Array');
  }

  if (typeof size !== 'number') {
    throw new TypeError('Size should be a Number');
  }

  var result = [];
  for (var i = 0; i < arr.length; i += size) {
    result.push(arr.slice(i, size + i));
  }

  return result;
};


 类似资料:
  • 这是我的代码从标题 我没有活动插件。wp_head有两个过滤器-没有一个用于显示“title”,整个主题代码中也没有其他wp_title或“title”。 关于如何删除第二个标题有什么想法吗?

  • 为什么当我看到二进制搜索的示例代码时,从来没有一个if语句来检查数组的开始还是结束是目标? 在本例中,如果目标是-1或20,搜索将进入递归。但是它添加了一个if语句来检查目标是否是mid,那么为什么不添加两个语句来检查它的左边还是右边呢?

  • 问题内容: 我有一个有趣的现象与PHP结束标记。我有一个通过Ajax调用执行的php文件。在php文件中包含具有各种功能的php库文件。当包含此库时,php响应中包含一堆空行。当我从库中删除结束标签时,这停止了。谁能告诉我这里发生了什么? 问题答案: 这是有据可查的。从PHP手册: 文件末尾的PHP块的结束标记是可选的,在某些情况下,当使用include()或require()时,它会有所帮助,因

  • 我是新来的反应,并试图理解为什么我不能添加超文本标记语言到我的渲染方法 如果我添加

  • 本文向大家介绍将Bootstrap添加到React.js项目,包括了将Bootstrap添加到React.js项目的使用技巧和注意事项,需要的朋友参考一下 有多种方法可以在react项目中添加引导程序。 使用引导CDN 安装引导程序依赖项 使用React Bootstrap软件包 使用引导CDN 这是添加引导程序的最简单方法。与其他CDN一样,我们可以在react项目的index.html中添加引

  • 上面的正则表达式与方法一起使用,以读取“数据”捕获组,并按预期工作,直到提供的输入字符串长度超过1,200个字符左右,在这种情况下会导致堆栈溢出。 可以重写上面的正则表达式以避免堆栈溢出问题吗?