React:如何遍历对象?

React: How to loop through object?

patient.users returns

patients.users 它是一个对象数组,但我无法遍历它。当我尝试调用 patients.users[0] 时,它返回“TypeError:无法读取未定义的属性(读取‘0’)”。这是为什么?

function DoctorPanel() {
const location = useLocation();
const { id } = location.state;
const [patients, setPatiens] = useState('');

useEffect(() => {
  getPatients();
}, [])

const getPatients = () => {
  api.getDoctorById(id).then(response => {
    setPatiens(response.data)
})

 }

console.log(patients.users)



return (

<div>
    <div className="container">
      <h2 className="text-center">List of Patients</h2>
      <table className="table table-bordered table-striped">
          <thead>
              <th>Employee First Name</th>
              <th>Employee Last Name</th>
              <th>Number</th>
          </thead>
          <tbody>
            {
              patients.users.map(patient => 
                      <tr>
                          <td>{patient.firstName}</td>
                           <td>{patient.secondName}</td>
                           <td>{patient.number}</td>
                      </tr>
               )
            }
          </tbody>
      </table>    
  </div>
</div>

) }

for 循环、forEach 和 with Object.keys 也不起作用。我如何遍历它并显示详细信息?

问题是因为当你第一次渲染这个组件时 patients.users 数组中没有任何东西,所以它说无法读取你的数组的未定义的属性。

然后您在 useEffect 中获取数据,这是在第一次渲染后 运行。

您需要做的是在您访问的任何地方 patients.users 更改为:

patient?.userspatient && patient.users,这包括您的 console.log。这样做是在尝试访问 users 之前检查 patient 数组是否未定义。

编辑:

useEffect 中,将代码放入其中而不是调用存在于外部的函数也是最佳做法。你在状态 setter setPatiens 中有一个错字应该是 setPatients.