【问题标题】:Trying to Map Over an Array within Array and display in table尝试在数组中映射数组并在表格中显示
【发布时间】:2021-05-07 08:28:03
【问题描述】:

我的数据库中目前有三个表。我有一个用户、医学和医学详细信息表。它们是这样关联的,med details 属于 Medicine,medicine 属于 user。

我目前正在使用 sequelized 调用我的数据库并获取用户和属于该用户的嵌套表。在 react 中,我需要 map 覆盖对象中的 Medicine 数组以取回所有药物名称,然后我想 map 覆盖 med 详细信息数组以获取服用时间。

                <tbody>
                    { user.Medicines && user.Medicines.length !== 0 && user.Medicines.map(item => {
                        console.log(item)
                    

                        const medDeets = item.MedDeets
                        const medDeetMap = medDeets.map(deet => {
                            const time = deet.timeTaken

                            // setTime(time)
             Issue here>?           }) 
                        return (
                            <tr>
                                <td>{item.medicineName}</td>
                                <td>   </td>
                                <td></td>
                                <td>{item.waitingPeriod} hours</td>
                            </tr>

                        )
                        // }


                    })}
                </tbody>

如果我尝试从我的第二个 map 函数中移动 })(也显示在上面的代码中),我遇到了似乎是范围界定问题,并且无法再看到我的第一个 map 函数中的数据。如果我从第二个map 函数尝试setState,我会收到太多重新渲染错误。

目前是全栈开发计划的新毕业生,这是我第一次使用 Stackoverflow,如果我遗漏了一些明显的东西,我很抱歉。感谢您的帮助/反馈。

【问题讨论】:

  • 每当你执行 setState 时,你的组件就会被渲染。所以如果你在 render 方法中直接写 setState 就会死循环。
  • 尽量不要在jsx中做太多的内联逻辑。准备一个包含您要显示的数据的数组,然后将其映射到 jsx 中。也许准备应该放在useMemo(),如果它很贵。

标签: javascript reactjs sequelize.js


【解决方案1】:

你不能在渲染函数中setstate,因为它会导致 副作用。究竟发生了什么,每次你更新state react 调用 render 函数,所以如果你将在 render 中更新 state 函数然后它会卡在无限循环中

 <tbody>
                    { user.Medicines && user.Medicines.length !== 0 && user.Medicines.map(item => {
                        console.log(item)
                    

                        const medDeets = item.MedDeets
                        const medDeetMap = medDeets.map(deet => {
                            const time = deet.timeTaken
return time ;
                    }) 
                        return (
                            <tr>
                                <td>{medDeetMap .medicineName}</td>
                                <td>   </td>
                                <td></td>
                                <td>{medDeetMap .waitingPeriod} hours</td>
                            </tr>

                        )
                        // }


                    })}
                </tbody>

【讨论】:

  • 抱歉,我的描述有点不清楚。我正在尝试从第二个 medDeets.map 获取数据并将其显示在下面的空白 部分中。 ``` {来自第一个地图的数据} {来自第二个地图的数据} {来自第二个地图的数据} {数据从第一张地图开始} 小时 ```
  • 你可以定义一个方法并在那里设置状态并在渲染方法中使用状态
猜你喜欢
  • 1970-01-01
  • 2018-10-09
  • 1970-01-01
  • 1970-01-01
  • 2020-08-20
  • 2022-01-01
  • 2017-02-15
  • 1970-01-01
  • 2021-09-07
相关资源
最近更新 更多