Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript React:递归地呈现嵌套元素_Javascript_Reactjs - Fatal编程技术网

Javascript React:递归地呈现嵌套元素

Javascript React:递归地呈现嵌套元素,javascript,reactjs,Javascript,Reactjs,我为代码格式提前道歉。 我有这样一个数据源: var data = { key1: 'value', key2: 123, key3: { key30: 'value', key31: { key310: 123, key311: 'hello' } } } 使用React,我尝试将其转换为如下所示的: <ul id="data"> <li>key1: value</li> <li>key2: 123</li> <

我为代码格式提前道歉。 我有这样一个数据源:

var data = {
key1: 'value',
key2: 123,
key3: {
 key30: 'value',
 key31: {
  key310: 123,
  key311: 'hello'
 }
}
}
使用React,我尝试将其转换为如下所示的

<ul id="data">
<li>key1: value</li>
<li>key2: 123</li>
<li>key3: [Object]
 <ul>
  <li>key30: value</li>
  <li>key31: [Object]
   <ul><li>key310: 123</li>
   <li>key311: hello</li>
   </ul>
  </li>
 </ul>
</li>
</ul>
  • 关键1:价值
  • 关键字2:123
  • 键3:[对象]
    • 键30:值
    • 键31:[对象] 按键310:123
    • 键盘311:你好
到目前为止,我已经尝试:

    React.createClass({
    getInitialState: function() {
     return {lists: [{
      key1: 'value',
      key2: 123,
      key3: {
       key30: 'value',
       key31: {
        key310: 123,
        key311: 'hello'
       }
    }
    }]}
    },
    generateFirst: function(parent, data, tempContainer) {
    var li
    var liHead
    var wrap
    var key
    for (key in data) {
      if (this.getType(data[key]) === 'object') {
        // li head
        liHead = React.DOM.li({
          className: 'token-head'
        }, key + ':' + data[key])

        // line
        li = React.DOM.li({
          className: 'iop'
        }, React.DOM.ul({
          className: 'iok'
        }, this.generateFirst(data[key])))

        // wrap
        wrap = React.DOM.ul({
          className: 'wrap-ul'
        }, li)

        tempContainer.push(liHead)
        tempContainer.push(wrap)
      } else {
        li = React.DOM.li({
          className: 'iol'
        }, key + ':' + data[key])
        tempContainer.push(li)
      }
    }
  },
  renderTokenContent: function(data) {
    var tempContainer = []
    this.generateFirst(data, tempContainer)
    return (<ul>{tempContainer}</ul>)
  },
  render: function() {
    var self = this
    return (<ul className="scroll-helper">
                  { this.state.lists.map(function(data) {
                      return (<li >
                                { self.renderTokenContent(data) }
                              </li>)
                    }) }
                </ul>)
  }
})
React.createClass({
getInitialState:函数(){
返回{列表:[{
键1:'值',
键2:123,
关键3:{
键30:'值',
关键31:{
按键310:123,
311键:“你好”
}
}
}]}
},
generateFirst:函数(父级、数据、临时容器){
李华
里赫德变种
变量包装
变量键
用于(输入数据){
if(this.getType(data[key])=='object'){
//李海德
liHead=React.DOM.li({
类名:“令牌头”
},键+':'+数据[键])
//线
li=React.DOM.li({
类名:“iop”
},React.DOM.ul({
类名:“看”
},this.generateFirst(数据[key]))
//包裹
wrap=React.DOM.ul({
类名:'wrap ul'
},李)
临时容器推压(liHead)
临时容器。推(包)
}否则{
li=React.DOM.li({
类名:“iol”
},键+':'+数据[键])
临时容器推送(li)
}
}
},
renderTokenContent:函数(数据){
var tempContainer=[]
this.generateFirst(数据,临时容器)
返回(
    {tempContainer}
) }, render:function(){ var self=这个 返回(
    {this.state.lists.map(函数(数据)){ 返回(
  • {self.renderTokenContent(数据)}
  • ) }) }
) } })

它解析整个树,但不在正确的容器中呈现元素

下面是React.14.Common/TreeView中的嵌套树示例。请注意,在这种情况下,嵌套属性是子属性

从“React”导入React;
从“lodash/object/get”导入lodashGet;
设TreeRootSty={lineHeight:'120%'}
让liSty={listStyleType:'none'};
让ulSty={height:'inherit',WebkitPaddingStart:'16px'};
让ulStyle={height:'inherit',WebkitPaddingStart:'16px'};
设iconSty={marginRight:'10px',width:'16px'};
让NotToggable={
颜色:“#FFF”,
光标:“指针”,
边距:“0.8em”
};
让可切换={
颜色:“#815C7C”,
光标:“指针”,
边距:“0”
};
让选项={};
让getTreeNode=函数(子级,索引){
return
  • ; }; 类JTreeViewNode扩展了React.Component{ 构造函数(props){super();} iconHandler=()=>{ if(this.props.node.children&&this.props.node.children.length>0){ this.props.iconClick(this.props.node); }否则{ 这是clickHandler(); } }; clickHandler=()=>{this.props.titleClick(this.props.node);}; render(){ 设titleSty={color:'#afac87',marginTop:'2px'}; 让子节点; 设pSty=不可切换; if(this.props.node.children&&this.props.node.children.length>0){ childNodes=this.props.node.children.map(getTreeNode,this); titleSty.color=this.props.node.selected?#7BB53B':#AF90A5'; }否则{ titleSty.color=this.props.node.selected?“#b58900”:“#afac87”; } 让isClosed=true; 如果(this.props.node.closed!=null)isClosed=this.props.node.closed; 让分支=( {childNodes} ) 如果(isClosed)分支=null; 让props=this.props; 让iconType=lodashGet(props,options.typeName); if(iconType==options.icon.sun)iconSty.background=“url('./img/sun.ico')0/16px不重复!重要”; else if(iconType==options.icon.leaf)iconSty.background=“url('./img/leaf.ico')0/16px不重复!重要”; else if(iconType==options.icon.snow)iconSty.background=“url('./img/snow.ico')0/16px不重复!重要”; else iconSty.background=“url('./img/sun.ico')0/16px不重复!重要”; 返回( {this.props.node.title} {branch} ); } } 导出默认类JTreeView扩展React.Component{ render(){ 选项=this.props.options; 让childNodes=this.props.data.map(getTreeNode,this); 返回( {childNodes} ); }
    }
    我遇到了类似的问题,这里有一个解决方案;希望能有帮助

    const dummyData=Immutable.fromJS(
    {Id:10203040,
    伯迪斯:“这个词”,
    包含:{
    用户ID:219038012,
    名字:“约翰”,
    姓:“史密斯”,
    用户名:“JSmith”,
    密码:“通行证”,
    字符串:{1:“红色钓鱼”,蓝色:“蓝色钓鱼”}
    },
    电话:1337,
    清单:{
    答:1,,
    b:2,
    c:3
    },
    关闭:“关闭”
    })
    类NestedListDisplay扩展React.Component{
    深度显示(项目){
    var newItems=[]
    用于(让项目[键,输入]){
    newItems[newItems.length]=(此.checker(条目,键))
    }
    返回新项目
    }
    检查人(如输入){
    开关(输入类型){
    案例“对象”:
    return
      {this.deepDisplay(entry)}
    个案"名单": return
      {this.deepDisplay(entry)}
    案件编号: return
  • {entry}
  • 大小写“string”: return
  • {entry}