简体   繁体   English

如何从 object 呈现键值对反应

[英]How to render key value pairs from object react

This is object data that I have stored in my this.state.profile from an API request.这是 object 数据,我存储在我的 this.state.profile 中,来自 API 请求。

What I need to do know is render the values from the keys to the web broswer.我需要知道的是将键中的值渲染到 web 浏览器。 I am trying with the code below which does not work.我正在尝试使用下面不起作用的代码。 Also how do I render the objects within side this object?另外,如何在此 object 内渲染对象? This is all so confusing:(这一切都太令人困惑了:(

{
    "localizedLastName": "King",
    "lastName": {
        "localized": {
            "en_US": "King"
        },
        "preferredLocale": {
            "country": "US",
            "language": "en"
        }
    },
    "firstName": {
        "localized": {
            "en_US": "Benn"
        },
        "preferredLocale": {
            "country": "US",
            "language": "en"
        }
    },
    "profilePicture": {
        "displayImage": "urn:li:digitalmediaAsset:C5603AQGjLGZPOyRBBA"
    },
    "id": "fm0B3D6y3I",
    "localizedFirstName": "Benn"
}

How I am trying to render it:我如何尝试渲染它:

const { profile } = this.state;

const profileList = Object.keys(profile).map((key,value)=>{
  return (
      <div>{key}{value.toString()}</div>
  );
})

{ profileList }

try:尝试:

return (
   {Object.entries(profile).map(([key,value]) => {
      <div>{key} : {value.toString()}</div>
   })}
)

the iteration needs to happen inside of the return .迭代需要在return内部进行。

You could build up your object outside your render call like below and just render it (elements).您可以在渲染调用之外构建 object,如下所示,然后渲染它(元素)。

var elements = [];
for (var prop in this.state.profile) {
    elements.push(<div>{prop} : {this.state.profile[prop].toString()}</div>)
}

If it's not working my guess would be your state isn't initialised or your target js version doesn't support Object.entries如果它不起作用,我的猜测是您的 state 未初始化或您的目标 js 版本不支持 Object.entries

First of all, you need to deal with nested objects:首先,您需要处理嵌套对象:

{
    ...
    "firstName": {
        "localized": {
            "en_US": "Benn"
        },
        "preferredLocale": {
            "country": "US",
            "language": "en"
        }
    }...
}

If you try to render the value on the key firstName , you will get a object as value, and React can't render objects as elements.如果您尝试渲染键firstName上的值,您将获得 object 作为值,并且 React 无法将对象渲染为元素。

And if you call toString() on it, you will get [Object object] as value.如果你在它上面调用toString() ,你会得到[Object object]作为值。

To solve this, you gonna need some recursion:为了解决这个问题,你需要一些递归:

const objToString = obj => {
  let result = []; 

  Object.keys(key => {
    if(typeof obj[key] === 'object'){
      let children = (<div>{key} : {objToString(obj[key])}</div>)
      result.push(children)
    } else
      result.push(<div>{key} : {obj[key]}</div>)
  })
}

...


const profileList = objToString(profile)

This should give you this something like:这应该给你这样的东西:

...
<div>firstName: 
  <div>localized:
    <div>en_US: Benn</div>
  </div>
</div>
...

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

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