【问题标题】:Map over two arrays and display data in a single table?映射两个数组并在单个表中显示数据?
【发布时间】:2018-10-09 08:24:44
【问题描述】:

假设我有两个数组形式的状态属性,如下所示:

constructor(props) {
    super(props);
    this.state = {
            fullNames: [],
            salaryInfo: []
        }}

...等(我收到道具的许多其他代码,发出 ajax 请求)

我想要完成的是循环遍历我所在州的这两个数组,并将它们显示在一个一个表中。

例如,这样做很容易:

const employeesFormated = fullNames
        .map(item => {
        return (
        <tr>
            <td>{item}</td>
        </tr>

const salariesFormated = salaryInfo
        .map(item => {
        return (
        <tr>
            <td>{item}</td>
        </tr>

...然后将其显示在 JSX 表格主体中:

                   <table>
                       <thead>
                        <tr>
                            <th>Employee name</th>                        
                        </tr>
                        </thead>
                        <tbody>
                            {employeesFormated}
                        </tbody>
                    </table>

... 对薪水数组/表也可以这样做。并且通过一些额外的 CSS 技巧可能会使这一切都适用于放置在正确位置的两个不同的表,但我想知道是否可以映射两者并将它们呈现在具有相应数据的单个表中,这意味着 =>

员工 A === 薪水 A

【问题讨论】:

  • 为什么不在你的状态下创建员工对象?

标签: javascript arrays reactjs html-table


【解决方案1】:

如果 state 是一个对象数组,以salary 和 name 作为键,可能会更容易,但是如果你知道 fullNames 和salary 的长度相同,并且索引从一个到另一个对应(意味着索引 i 处的薪水对应于索引 i) 处的名称,我猜你可以通过索引访问它们。

const employeeTable = this.fullNames
        .map((item, idx) => {
        return (
        <tr>
            <td>{item}</td>
            <td>{this.state.salaryInfo[idx]}</td>
        </tr>
        )
        })  

另外,当你从数组渲染时,React 期望你有一个唯一的 key prop 来确保 DOM 元素可以被跟踪。如果您不提供,它将根据索引为您插入,但不建议这样做。

【讨论】:

  • 由于所有员工的数据都正确呈现,工资也在控制台中以正确的顺序显示,但是当我按照你展示给我的方式尝试时它只呈现最后一个第一个 &lt;td&gt; 的薪水...你肯定让我走上了正确的道路,但这还不是:/
  • 那么请分享更多代码。不知道为什么只渲染最后一个 - 你在哪里控制台。记录它?在渲染方法中?
  • 错误出在我的 API 调用上,您在这里完全回答了我的问题。谢谢你。 @Abid
猜你喜欢
  • 1970-01-01
  • 2021-08-23
  • 1970-01-01
  • 2022-11-30
  • 2021-05-07
  • 2017-03-31
  • 1970-01-01
  • 2015-12-21
  • 2011-12-30
相关资源
最近更新 更多