使用react重复列表

时间:2016-11-10 17:16:45

标签: javascript reactjs

我有以下列表,其中包含图像编号和文件夹编号,我想重复它27次 - 只想更改图像编号并能够设置文件夹编号。

    <ul>
        <li><input type="radio" checked="checked" /> <img src="assets/images/personal_images/folder1/0001.png" /></li>
    <li><input type="radio" checked="checked" /> <img src="assets/images/personal_images/folder1/0002.png" /></li>
    <li><input type="radio" checked="checked" /> <img src="assets/images/personal_images/folder1/0003.png" /></li>
</ul>

我正在使用以下代码:

  var RepeatModule = React.createClass({
      getDefaultProps: function() {
        return { items: [] }
      },
      render: function() {

        var listItems = this.props.items.map(function(item) {
          return (
            <li key="{item}">
               <input type="radio" checked="checked" /> 
               <img src="assets/images/personal_images/folder1/000' + {item} + '.png" />
            </li>
          );
        });

        return (
            <ul>
              {listItems}
            </ul>
        );
      }
    });

2 个答案:

答案 0 :(得分:0)

虽然可以按照您提到的方式进行操作,但最好将其拆分为两个组件。

var List = React.createClass({
  render: function() {
  var list = [];
  for (var i = 0; i < 27; i++) {
    list.push(<ListItem key={i} />);
  }
    return (
        <ul>
          {list}
        </ul>
    );
  }
});

var ListItem = React.createClass({
  render: function() {
    return (
        <li>
          <input type="radio" checked="checked" /> 
          <img src={'assets/images/personal_images/folder1/000' + this.props.key + '.png'} />
        </li>
    );
  }
});

答案 1 :(得分:0)

这就是我所提到的......它重复了27次,并允许文件夹作为道具传递,就像你想要的那样。

var RepeatModule = React.createClass({
  getDefaultProps: function() {
    return {
      folder: 'folder1'
    }
  },
  render: function() {

    // Build your 27 items here in to an array
    // you can also pass in 27 items as props but a for loop is a great way to get exactly 27 things.
    var items = [];
    for (var i = 1; i <= 27; i++) {
      items.push({
        image: 'assets/images/personal_images/' + this.props.folder + '/000' + i + '.png'
      })
    }

    return (
      <ul>
      {
        // map over the array here and display your list items
        (items).map(function(item, key) {
          return (
            <li key={key}>
              <input type="radio" checked="checked" /> 
              <img src={item.image} />
            </li>
          )
        })
      }
      </ul>
    );
  }
});

您可以在此处看到此作品(包含损坏的图片):https://jsbin.com/koripebake/edit?html,js,output