Я полагаю, что вы ошиблись при сопоставлении данных:
Первое предсказание:
Предупреждение: каждый дочерний элемент в списке должен иметь уникальный ключ "prop.
Вы должны установить значение ключа при отображении:
, например:
cols.map(colData => {
return <td key={colData.key}>{item[colData.key]}</td>;
});
Второе предсказание:
Предупреждение: validateDOMNesting (...): текстовые узлы пробельных символов не могут быть дочерними по отношению к. Убедитесь, что у вас нет лишних пробелов между тегами в каждой строке исходного кода.
Вам необходимо очистить дополнительное свободное пространство (tr & 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
<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>