validateDOMNesting (. .): & lt; tr>不能作为
validateDOMNesting(...): <tr> cannot appear as a child of <div>
的子元素出现。
我正在努力得到这份工作:
订单:
render () {
const orders = this.state.orders.map((order, index) => <OrderRow order={order} key={index}/>);
return (
<table>
<tbody>
{orders}
</tbody>
</table>
);
}
OrderRow:
render () {
return (
<tr>
<td>{this.props.order.number}</td>
<td>{this.props.order.products}</td>
<td>{this.props.order.shippingDate}</td>
<td>{this.props.order.status}</td>
</tr>
);
}
但是仍然得到这个错误:
Warning: validateDOMNesting(...): <tr> cannot appear as a child of <div>.
See Orders > div > OrderRow > tr.
有什么好办法吗?
将OrderRow
<tr>
包装在<tbody>
中,正如这里的问题所解释的那样,浏览器需要<tbody>
标签。如果它不在您的代码中,那么浏览器将自动插入它。这在第一次渲染时工作得很好,但是当表被更新时,DOM树与React期望的不同。这可能会产生奇怪的bug,因此React会警告你插入<tbody>
.
OrderRow
render () {
return (
<table>
<tbody>
<tr>
<td>{this.props.order.number}</td>
<td>{this.props.order.products}</td>
<td>{this.props.order.shippingDate}</td>
<td>{this.props.order.status}</td>
</tr>
</tbody>
</table>
);
}
像这样:
render() {
return (
<table>
<tbody>
{this.state.orders.map((order, index) => {
<tr index={index}>
<td>{order.number}</td>
<td>{order.products}</td>
<td>{order.shippingDate}</td>
<td>{order.status}</td>
</tr>
})}
</tbody>
</table>
);
}
或者更优雅的:
render () {
return (
<table>
<tbody>
{this.state.orders.map((order, index) => (
return (<OrderRow order={order} key={index} />);
)}
</tbody>
</table>
);
}
它将tr
呈现为div
,所以使用.map()
代替:)
你能试试更自动的吗?
render() {
return (
<table>
<tbody>
{this.state.orders.map((order, index) => {
<tr index={index}>
{Object.keys(order).map(function(key,id) {
return (<td key={id}>{order[key]}</td>)
})}
</tr>
}}
</tbody>
</table>
);
}
相关文章:
- 不能从angular2中的子组件指定父组件中的数组
- AngularJS UI路由器不能像ng路由器那样工作
- HTML5音频加载和播放获胜'我不能在iPad上工作
- 转义符不能与innerHTML一起使用
- JSON.parse没有'不能使用Javascript
- JS可以在Chrome中工作,但不能在Firefox中工作
- 砌体不能填补小缺口
- javascript扫雷器floodfill算法不能正常工作
- JavaScript指令不能像我想象的那样工作
- 为什么在这个网站上不能通过JS访问元素
- Facebook登录按钮没有'不能在Firefox上工作
- WebRTC视频聊天可以在FF中使用,但不能在Chrome中使用
- 为什么jQuery 1.8不能在IE8和InternetExplorer9中使用?(截至2012年9月的IE9最新版本)
- AngularJS:$q.dedefe()不能由工厂方法共享
- 不能在同一页上进行多个jquery幻灯片切换
- 不能在图像中的地图标记中使用花式框jquery插件的区域标记
- jQuery Datepicker可以在Safari中工作,但不能在FF或Chrome中工作
- javascript没有´我不能在joomla 3.0中工作
- 为什么我不能取消 TR 的样式
- validateDOMNesting (. .): & lt; tr>不能作为