我正在try 将jQuery组件转换为react js,我遇到的困难之一是基于for循环呈现n个元素.

I understand this is not possible, or recommended and that where an array exists in the model it makes complete sense to use map. That's fine, but what about when you do not have an array? Instead you have numeric value which equates to a given number of elements to render, then what should you do?

下面是我的示例,我想根据元素的层次 struct 级别为其添加任意数量的span标记作为前缀.因此,在级别3,我希望文本元素之前有3个跨距标记.

在javascript中:

for (var i = 0; i < level; i++) {
    $el.append('<span class="indent"></span>');
}
$el.append('Some text value');

我似乎无法理解这一点,或者任何类似于在JSX react js组件中工作的内容.相反,我必须执行以下操作,首先构建一个长度正确的临时数组,然后循环该array.

react js

render: function() {
  var tmp = [];
  for (var i = 0; i < this.props.level; i++) {
    tmp.push(i);
  }
  var indents = tmp.map(function (i) {
    return (
      <span className='indent'></span>
    );
  });

  return (
    ...
    {indents}
    "Some text value"
    ...
  );
}

Surely this can't be the best, or only way to achieve this? What am I missing?

推荐答案

Updated: As of React > 0.16

Render方法不必返回单个元素.也可以返回array.

var indents = [];
for (var i = 0; i < this.props.level; i++) {
  indents.push(<span className='indent' key={i}></span>);
}
return indents;

return this.props.level.map((item, index) => (
    <span className="indent" key={index}>
        {index}
    </span>
));

Docs here explaining about JSX children


OLD:

您可以改为使用一个循环

var indents = [];
for (var i = 0; i < this.props.level; i++) {
  indents.push(<span className='indent' key={i}></span>);
}
return (
   <div>
    {indents}
    "Some text value"
   </div>
);

You can also use .map and fancy es6

return (
   <div>
    {this.props.level.map((item, index) => (
       <span className='indent' key={index} />
    ))}
    "Some text value"
   </div>
);

此外,还必须将返回值包装在容器中.我在上面的例子中使用了div

就像doctor 说的here

目前,在组件的呈现中,您只能返回一个 node ;如果您有一个div列表要返回,则必须将您的组件包装在div、span或任何其他组件中.

Jquery相关问答推荐

Flask,如何为ajax调用返回成功状态码

无法使用 HTML 设置未定义的 jQuery UI 自动完成的属性_renderItem

jQuery在点击函数后获取
  • 元素的id/value
  • jquery克隆div并将其附加在特定div之后

    在 select2 中使用 AJAX 进行标记

    如何在 jQuery 中为 getJSON 设置缓存 false?

    在单击事件上判断 Ctrl / Shift / Alt 键

    $(document).on('click', '#id', function() {}) 与 $('#id').on('click', function(){})

    使用 jQuery 验证插件自定义日期格式

    用jquery替换锚文本

    自动完成将值而不是标签应用于文本框

    在 jQuery UI 自动完成上没有检测到结果

    如何在 JQuery 中 Select 除单击元素之外的所有类?

    jquery,id内类的 Select 器

    如何防止使用光标拖动 Select 文本/元素

    Jquery live() 与委托()

    通过 javascript/jquery 删除/截断前导零

    javascript,是否有像 isArray 这样的 isObject 函数?

    Chrome 中的 AJAX 发送选项而不是 GET/POST/PUT/DELETE?

    JQuery 判断 DOM 中的重复 id