javascript - if 在map函数中reactjs元素的内部循环

标签 javascript reactjs

大家好,我在用 Reactjs 解决这个任务时遇到问题,不熟悉 JSX,而且没有太多 JS 教程。谁能帮我解决这个问题,我想在用户内部使用嵌套用户列表进行循环,嵌套深度最多为 3。

这是我的代码示例:

var testData = [{
  "username": "test1",
  "users": [{
    "username": "test2",
    "users": null
  }, {
    "username": "test3",
    "users": null
  }, {
    "username": "test4",
    "users": [{
      "username": "test2",
      "users": null
    }, {
      "username": "test3",
      "users": null
    }, {
      "username": "test4",
      "users": null
    }]
  }]
},{
  "username": "test2",
  "users": [{
    "username": "test2",
    "users": null
  }, {
    "username": "test3",
    "users": null
  }, {
    "username": "test4",
    "users": [{
      "username": "test2",
      "users": null
    }, {
      "username": "test3",
      "users": null
    }, {
      "username": "test4",
      "users": null
    }]
  }]
}];


function handleClick(item) {
    console.log(item);
};

var Tester = React.createClass({
  displayName: 'Tester',
  render: function render() {
    return React.createElement(
      'ol', {
        id: "user-list",
        'className': ''
      },
      this.props.users.map(function(item, i) {
        return React.createElement(
          'li',
          {
            'className': '',
            id: "user-li-" + i,
            onClick: handleClick.bind(this, item),
            key: i
          },
          item.username
          //here should be next nest?
        )
      })
    );
  }
});
React.render(React.createElement(Tester, {
  users: testData
}), document.getElementById('example'));
<!DOCTYPE html>
<html>

  <head>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/react/0.14.7/react.js" data-semver="0.14.7" data-require="react@*"></script>
    <script src="http://code.jquery.com/jquery-2.1.4.min.js"></script>
    <link href="style.css" rel="stylesheet" />
  </head>

  <body>
    <div id="example"></div>
  </body>

</html>

最佳答案

您可以递归地呈现用户:

var testData = [{
  "username": "test1",
  "users": [{
    "username": "test2",
    "users": null
  }, {
    "username": "test3",
    "users": null
  }, {
    "username": "test4",
    "users": [{
      "username": "test2",
      "users": null
    }, {
      "username": "test3",
      "users": null
    }, {
      "username": "test4",
      "users": null
    }]
  }]
},{
  "username": "test2",
  "users": [{
    "username": "test2",
    "users": null
  }, {
    "username": "test3",
    "users": null
  }, {
    "username": "test4",
    "users": [{
      "username": "test2",
      "users": null
    }, {
      "username": "test3",
      "users": null
    }, {
      "username": "test4",
      "users": null
    }]
  }]
}];


function handleClick(item) {
    console.log(item);
};

var Tester = React.createClass({
  displayName: 'Tester',
  render: function render() {
    
    var renderUsers = function(users, deep) {
        if (deep === 0) 
          return null;
      
        return React.createElement(
          'ol', {
            id: "user-list",
            'className': ''
          },
          users.map(function(item, i) {
              return React.createElement(
                'li',
                {
                  'className': '',
                  id: "user-li-" + i,
                  onClick: handleClick.bind(this, item),
                  key: i
                },
                [React.createElement('span', null, item.username)].concat(item.users ? renderUsers(item.users, deep-1) : [])
            )
          })
        );  
    }
    
    return renderUsers(this.props.users, 3);
  }
});

React.render(React.createElement(Tester, {
  users: testData
}), document.getElementById('example'));
<!DOCTYPE html>
<html>

  <head>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/react/0.14.7/react.js" data-semver="0.14.7" data-require="react@*"></script>
    <script src="http://code.jquery.com/jquery-2.1.4.min.js"></script>
    <link href="style.css" rel="stylesheet" />
  </head>

  <body>
    <div id="example"></div>
  </body>

</html>

关于javascript - if 在map函数中reactjs元素的内部循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35177157/

相关文章:

javascript - 在 React JS 中处理关键事件

javascript - 使用 React 在每两个元素之后创建新的 ul

javascript - 像 React 中的 Bootstrap 模态行为

reactjs - 如何在 Semantic-UI-React 中将下拉列表恢复为默认值

javascript - 添加 "onmouseenter"(悬停)音频效果,但除非我先点击,否则它不会在 chrome 中播放?

javascript - 没有 JS/JQuery 的 ASP.NET

javascript - 如何从 json 字段数组动态创建没有 jquery 的表单?

reactjs - 使用 Recoil 创建和读取数千个项目的状态

javascript - DIV AREA 易于下拉菜单(显示 :none to display:block)

Javascript 从子页面回发父页面