繁体   English   中英

如何迭代嵌套对象并在jsx中渲染?

[英]How to iterate nested objects and render inside jsx?

如何在jsx组件中渲染嵌套映射?

我需要做相当于javascript的(key in groupItem){}见下文。

class MyComponent extends React.Component {
    render () {    
        var options = this.props.options;
        return (            
            <div>
                {options.map(function(groupItem, key){ return (
                    /* 
                      Unexpected Token if using groupItem.map?
                      {groupItem.map(function(){return })}

                   */
                )})}
            </div>
        )
    }
}
Dropdown.defaultProps = {
   options:[{ 
      'groupX':{
          'apple':'lovely green apple',
          'orange':'juicy orange',
          'banana':'fat banana'
      }
   }]
}

JSON.stringify(groupItems) === {
    'groupX':{
        'apple':'lovely green apple',
        'orange':'juicy orange',
        'banana':'fat banana'
     }
}

为什么这些不起作用?

groupItem.map - 不工作

Object.keys(groupItem).forEach(function(key){ - 不工作

你的Object.keys实现几乎是对的,(map是仅用于数组的属性),但语法错误来自包装{} 你不需要逃避,你已经在js语法中。

return (            
    <div>
        {options.map(function(groupItem, key){ return (
            Object.keys(groupItem).map(function(item){return (
                <YourComponent group={groupItem} item={item} />
            );})
        );})}
    </div>
);

由于这种笨拙,我决定创建自己的方法。

function each(obj, callback){
    return (Array.isArray(obj))? forArray(obj, callback):forObject(obj, callback);
}
function forArray(obj, callback){
    return obj.map(callback);
}
function forObject(obj, callback){
    return Object.keys(obj).map(callback);
}


class MyComponent extends React.Component {
    render () {    
        var options = this.props.options;
        return (            
            <div>                    
                {each(options, function(groupItem){ return (                        
                     each(groupItem, function(key){return ( 

这更容易阅读。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM