【问题标题】:ReactJs Render Value (Array of Objects) of ObjectReactJs 渲染对象的值(对象数组)
【发布时间】:2021-09-14 04:02:46
【问题描述】:
{
    "pendingShareholder": [
        [{
                "id": 5351,
                "userName": "iverson",
                "firstName": "Allen",
                "lastName": "Iverson",
                "password": "$2a$10$20ILdapdX6u8G1nH2jIr6upiKY04LCxD9yjHKUHRhUfpuG1w1ywd2",
                "contact": "97801671",
                "email": "john.doe@gmail.com",
                "roles": [{
                    "id": 3,
                    "name": "ROLE_SHAREHOLDER"
                }]
            },
            {
                "id": 5951,
                "userName": "rosgeller",
                "firstName": "Ros",
                "lastName": "Geller",
                "password": "$2a$10$Udrju2Tj6mKGJRZA3d2GFer6kfSI988xI1/R50s.XmrHcIN1IJxoO",
                "contact": "90908899",
                "email": "peter.sou@gmail.com",
                "roles": [{
                    "id": 3,
                    "name": "ROLE_SHAREHOLDER"
                }]
            }
        ]
    ]
}

大家好

我有上面的对象。如您所见,它是一个对象,具有一个键(“pendingShareholder”)。这个键的值是一个数组里面的一个数组(里面有对象)。

我需要在 ReactJS 中返回它。在这里使用 React Hooks。无论如何我似乎都做不到:( 谁能帮我。我在这里发疯了

提前致谢!

const adminStateObject = useSelector((state) => state.admin11111);`

return (
    <div className="adminmaincontent">
      <h2>Pending Approval Users</h2>
      <Table striped bordered hover size="sm" responsive>
        <thead>
          <tr>
            <th>ID</th>
            <th>UserName</th>
            <th>First Name</th>
            <th>Last Name</th>
            <th>Contact</th>
            <th>Email</th>
            <th>Action</th>
          </tr>
        </thead>
        {Object.keys(adminStateObject).map((key, i) => (
          <tbody key={uuid()}>
            {adminStateObject[key].map((key2, i2) => (
              <tr key={uuid()}>
                <td key={uuid()}>{key2.id}</td>
                <td key={uuid()}>{key2.userName}</td>
                <td key={uuid()}>{key2.firstName}</td>
                <td key={uuid()}>{key2.lastName}</td>
                <td key={uuid()}>{key2.contact}</td>
                <td key={uuid()}>{key2.email}</td>
              </tr>
            ))}
          </tbody>
        ))}
      </Table>
    </div>
  );


【问题讨论】:

  • 使用uuid() 生成密钥是个好主意吗?它将在每次渲染时创建一个新键,这会破坏使用键的全部目的。

标签: javascript json reactjs ecmascript-6 react-hooks


【解决方案1】:

您的map 操作似乎太多了。你需要 一个 来遍历你的嵌套数组。

正如 Gulam 在他们的评论中提到的,在每个 tbodytrtd 上使用 uuid 是矫枉过正的。只需添加对象 id 作为行键。

function Example({ data }) {
  return (
    <table>
      <thead>
        <tr>
          <th>ID</th>
          <th>UserName</th>
          <th>First Name</th>
          <th>Last Name</th>
          <th>Contact</th>
          <th>Email</th>
          <th>Action</th>
        </tr>
      </thead>
      <tbody>
        {data.pendingShareholder[0].map(obj => (
          <tr key={obj.id}>
            <td>{obj.id}</td>
            <td>{obj.userName}</td>
            <td>{obj.firstName}</td>
            <td>{obj.lastName}</td>
            <td>{obj.contact}</td>
            <td>{obj.email}</td>
          </tr>
        ))}
      </tbody>
    </table>
  );
};

const data = {pendingShareholder:[[{id:5351,userName:"iverson",firstName:"Allen",lastName:"Iverson",password:"$2a$10$20ILdapdX6u8G1nH2jIr6upiKY04LCxD9yjHKUHRhUfpuG1w1ywd2",contact:"97801671",email:"john.doe@gmail.com",roles:[{id:3,name:"ROLE_SHAREHOLDER"}]},{id:5951,userName:"rosgeller",firstName:"Ros",lastName:"Geller",password:"$2a$10$Udrju2Tj6mKGJRZA3d2GFer6kfSI988xI1/R50s.XmrHcIN1IJxoO",contact:"90908899",email:"peter.sou@gmail.com",roles:[{id:3,name:"ROLE_SHAREHOLDER"}]}]]};

// Render it
ReactDOM.render(
  <Example data={data} />,
  document.getElementById("react")
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/17.0.1/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/17.0.1/umd/react-dom.production.min.js"></script>
<div id="react"></div>

【讨论】:

  • 感谢您的帮助!它似乎正在工作。我现在可以看到两行,相当于两个用户。但是...我看不到 id、userName、firstName 等。它只是空白...知道为什么会这样吗?可能是因为我实际上在一个数组中有一个由 2 个对象组成的数组吗?
  • 更新。有了安迪的回答,当我尝试渲染 {obj} 时,它给了我数组的索引......基本上,0 和 1......所以看起来需要另一轮映射?
  • 我把钥匙弄错了,这可能导致整个东西无法渲染。我已经用一个工作示例更新了我的答案。我希望这会有所帮助。
  • 非常感谢您的帮助!你是救命的。完美答案!也感谢 Gulam 的建议 :) 我是初学者,仍在学习。干杯!
  • 我已经在这 20 年了,伊万。我们一直在学习。很高兴能提供帮助。
猜你喜欢
  • 2021-05-13
  • 1970-01-01
  • 1970-01-01
  • 2017-10-23
  • 1970-01-01
  • 2017-11-06
  • 2021-12-27
  • 2019-11-15
  • 2019-04-23
相关资源
最近更新 更多