【问题标题】:Warnings regarding providing key in map function but I already have one and warnings regarding whitespace关于在地图功能中提供键的警告,但我已经有一个关于空格的警告
【发布时间】:2020-07-23 01:36:53
【问题描述】:

我遇到了这些警告,我需要消除它们。

Warning: Each child in a list should have a unique "key" prop.
Check the render method of `Summary`. 

    in tr (at Summary.js:46)
    in Summary (at Main.js:323)
    in StepForm (at App.js:8)
    in div (at App.js:7)
    in div (at App.js:6)
    in App (at src/index.js:9)
    in StrictMode (at src/index.js:8)

Warning: validateDOMNesting(...): Whitespace text nodes cannot appear as a child of <tr>. Make sure you don't have any extra whitespace between tags on each line of your source code.

    in tr (at Summary.js:46)
    in tbody (at Summary.js:44)
    in table (created by ForwardRef)
    in ForwardRef (at Summary.js:32)
    in Summary (at Main.js:323)
    in StepForm (at App.js:8)
    in div (at App.js:7)
    in div (at App.js:6)
    in App (at src/index.js:9)
    in StrictMode (at src/index.js:8)

2020 年 4 月 11 日 关于密钥,我已经将它包含在我的代码中,但仍然收到警告消息,请参见下面的代码:

<tbody>
    {postArray.map(postArr=>
        <tr><td key = {postArr.txNumber}></td>
            <td>{postArr.accountNumber}</td>
            <td>{postArr.amount}</td>
            <td>{postArr.qNumber}</td>
            <td>{postArr.txNumber}</td>
            {/* <td><button >Edit</button></td> */}
            <td><button className="txnbuttonsmall" onClick={()=>this.props.editOne(postArr.txNumber)}>Edit</button></td>
            <td><button className="txnbuttonsmall" onClick={()=>this.props.deleteTx(postArr.txNumber)}>Delete</button></td>
            </tr>)}
</tbody>

【问题讨论】:

  • 你能把你的Summary的地图代码贴出来吗?
  • 已发布地图代码。

标签: arrays reactjs key warnings whitespace


【解决方案1】:

我猜你映射数据时错了:

第一个预测:

警告:列表中的每个孩子都应该有一个唯一的“key”属性。

映射时必须设置键值:

例如:

cols.map(colData => {
   return <td key={colData.key}>{item[colData.key]}</td>;
});

第二次预测:

警告:validateDOMNesting(...):空白文本节点不能出现 作为一个孩子。确保您没有任何额外的空格 源代码每一行的标签之间。

您需要清除多余的可用空间 (tr &amp; td)

例如:

return <tr key={item.id}> {cells} </tr>;

return <tr key={item.id}>{cells}</tr>;

最后,一起:

    ...

    if (this.props.rows.length > 0) {
              return data.map(item => {
                  var cells = cols.map(colData => {
                      return <td key={colData.key}>{item[colData.key]}</td>;
                  });
                  return <tr key={item.id}>{cells}</tr>;
              });
        }

    ...

已编辑:

需要为父tr设置key值并清除多余的空闲空间

<tr key={postArr.txNumber}>

而你必须改变:

<tbody>
    {postArray.map(postArr=>
        <tr><td key = {postArr.txNumber}></td>
            <td>{postArr.accountNumber}</td>
            <td>{postArr.amount}</td>
            <td>{postArr.qNumber}</td>
            <td>{postArr.txNumber}</td>
            {/* <td><button >Edit</button></td> */}
            <td><button className="txnbuttonsmall" onClick={()=>this.props.editOne(postArr.txNumber)}>Edit</button></td>
            <td><button className="txnbuttonsmall" onClick={()=>this.props.deleteTx(postArr.txNumber)}>Delete</button></td>
            </tr>)}
</tbody>

到:

<tbody>
    {postArray.map(postArr=> (
        <tr key={postArr.txNumber}>
            <td>{postArr.accountNumber}</td>
            <td>{postArr.amount}</td>
            <td>{postArr.qNumber}</td>
            <td>{postArr.txNumber}</td>
            {/* <td><button >Edit</button></td> */}
            <td><button className="txnbuttonsmall" onClick={()=>this.props.editOne(postArr.txNumber)}>Edit</button></td>
            <td><button className="txnbuttonsmall" onClick={()=>this.props.deleteTx(postArr.txNumber)}>Delete</button></td>
            </tr>
   ))}
</tbody>

【讨论】:

  • 关于已解决的空白,谢谢。对于我仍然遇到警告的关键,我已经发布了地图代码。
  • @协和飞机。好的。我在编辑部分进行了必要的更改。如果有帮助,请给您一个绿色检查和分数。感激不尽
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-07-03
  • 2018-11-27
  • 2019-11-06
  • 1970-01-01
  • 2013-03-31
  • 2011-05-06
  • 2019-01-12
相关资源
最近更新 更多