简体   繁体   English

validateDOMNesting(...):<tr> 不能作为孩子出现<div>

[英]validateDOMNesting(...): <tr> cannot appear as a child of <div>

I'm trying to get this work:我正在努力完成这项工作:

Orders:订单:

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>
  );
}

But still getting this error:但仍然收到此错误:

Warning: validateDOMNesting(...): <tr> cannot appear as a child of <div>.
See Orders > div > OrderRow > tr.

Any ideas how to fix it?任何想法如何解决它?

Wrap your OrderRow <tr> in <tbody> as explained in issue here , Browsers need the <tbody> tag.将您的OrderRow <tr>包裹在<tbody>如问题here中所述,浏览器需要<tbody>标签。 If it is not in your code, then the browser will automatically insert it.如果它不在您的代码中,那么浏览器会自动插入它。 This will work fine on first render, but when the table gets updated, then the DOM tree is different from what React expects.这将在第一次渲染时正常工作,但是当表更新时,DOM 树与 React 期望的不同。 This can give strange bugs, therefore React warns you to insert the <tbody> .这可能会产生奇怪的错误,因此 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>
  );
}

Something like this:像这样的东西:

 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> ); }

Or more elegant:或者更优雅:

 render () { return ( <table> <tbody> {this.state.orders.map((order, index) => ( return (<OrderRow order={order} key={index} />); )} </tbody> </table> ); }

它将tr渲染为div ,因此请改用.map() :)

Could you try something more automatic?你能试试更自动化的东西吗?

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>
  );
}

如何修复警告:validateDOMNesting(...):<div> 不能作为孩子出现</div><div id="text_translate"><p>我将用户列表作为道具传递给 UserItem 组件,以迭代用户列表并将它们显示在表上。 列表显示正确,我的渲染返回中没有任何 div,但我仍然收到错误:index.js:1446 Warning: validateDOMNesting(...): cannot appear as a child of.</p><p> 尝试了网上找到的许多解决方案,但没有一个有效</p><p>用户管理代码:</p><pre> import React, { Component } from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import Spinner from './common/Spinner'; import { getUsers } from '../actions/userActions'; import UserItem from './UserItem'; class UsersManagement extends Component { componentDidMount() { if (.this.props.auth.isAuthenticated) { this.props.history;push('/login'). } this.props;getUsers(), } render() { const { users. loading } = this.props;user; let usersList. if (users === null || loading) { usersList = <Spinner /> } else { if (users.length > 0) { usersList = users.map(user => ( <UserItem key={user._id} user={user} /> )) } else { usersList = <h2>No users</h2> } } return ( <div className="row"> <div className="col-12"> <h1 className="text-center mb-2">Users Management</h1> <button type="button" className="btn btn-success mb-4">New User</button> <table className="table"> <thead> <tr> <th scope="col">Options</th> <th scope="col">Username</th> <th scope="col">Email</th> <th scope="col">Phone Number</th> </tr> </thead> <tbody> {usersList} </tbody> </table> </div> </div> ) } } UsersManagement:propTypes = { getUsers. PropTypes.func,isRequired: auth. PropTypes.object,isRequired: user. PropTypes.object:isRequired } const mapStateToProps = state => ({ auth. state,auth: user. state,user }) export default connect(mapStateToProps; { getUsers })(UsersManagement);</pre><p> 用户项目代码:</p><pre> import React, { Component } from 'react'; import PropTypes from 'prop-types'; class UserItem extends Component { render() { const { user } = this.props; console.log(user); return ( <tr> <th scope="row"> <button type="button" className="btn btn-primary fa-xs mr-1"><i className="fas fa-pencil-alt"></i></button> <button type="button" className="btn btn-danger fa-xs"><i className="far fa-trash-alt"></i></button> </th> <td>{user.username}</td> <td>{user.email}</td> <td>{user.phone}</td> </tr> ) } } UserItem.propTypes = { user: PropTypes.object.isRequired } export default UserItem;</pre><p> 我希望修复警告信息</p></div> - How to fix Warning: validateDOMNesting(...): <div> cannot appear as a child of <tbody>

Gatsby 警告:validateDOMNesting(...):不能作为子项出现<div></div><div id="text_translate"><p>我正在学习通过几个教程构建 Gatsby 站点。 我正在使用 Gatsby 2.13.50(CLI:2.7.14)。 通常,这些教程会教我们构建基本模板。 当我打开开发工具到控制台时,它加载得很好,除了这个警告:</p><pre> Warning: validateDOMNesting(...): <html> cannot appear as a child of <div>.</pre><p> 警告非常非常长。 我将在我的代码之后发布它的 rest。</p><p> 我的 layout.js 基本模板位于 /src/components/layout.js。 它看起来像这样:</p><pre> import React from "react" const Layout = (props) => { return ( <html lang="en"> <head> <Helmet> <meta charSet="utf-8" /> <title>Demo</title> </Helmet> </head> <body> {props.children} </body> </html> ) } export default Layout</pre><p> 它由 /src/pages/index.js 使用,如下所示:</p><pre> import React from 'react' import Layout from '../components/layout' const IndexPage = () => { return ( <Layout> <h1>Demo onle.</h1> <p>Hello. This totally works fine.</p> </Layout> ) } export default IndexPage</pre><p> 如前所述,它有效,除了开发工具控制台中的非常长的警告。</p><p> 我用谷歌搜索了这个,但还没有发现这是怎么发生的以及如何避免它。 我发现有一个<a href="https://www.gatsbyjs.org/docs/custom-html/" rel="nofollow noreferrer">html.js</a>但我不知道这是否是某种默认模板以及我是否应该覆盖它以用作基本模板。 我试过了,但性能很差,所以我认为我错了。</p><p> 当我删除<html>标签时,我得到: Parsing error: Adjacent JSX elements must be wrapped in an enclosing tag.</p><p> 如果我用<div>替换它 它说<body> cannot appear as a child of <div></p><p> 这是很长的警告:</p><pre> Warning: validateDOMNesting(...): <html> cannot appear as a child of <div>. in html (at layout.js:10) in Layout (at chat.js:6) in ChatPage (created by HotExportedChatPage) in AppContainer (created by HotExportedChatPage) in HotExportedChatPage (created by PageRenderer) in PageRenderer (at json-store.js:93) in JSONStore (at root.js:51) in RouteHandler (at root.js:73) in div (created by FocusHandlerImpl) in FocusHandlerImpl (created by Context.Consumer) in FocusHandler (created by RouterImpl) in RouterImpl (created by Context.Consumer) in Location (created by Context.Consumer) in Router (created by EnsureResources) in ScrollContext (at root.js:64) in RouteUpdates (at root.js:63) in EnsureResources (at root.js:61) in LocationHandler (at root.js:119) in LocationProvider (created by Context.Consumer) in Location (at root.js:118) in Root (at root.js:127) in _default (at app.js:65) __stack_frame_overlay_proxy_console__ @ index.js:2177 warningWithoutStack @ react-dom.development.js:507 validateDOMNesting @ react-dom.development.js:8625 createInstance @ react-dom.development.js:8737 completeWork @ react-dom.development.js:16901 completeUnitOfWork @ react-dom.development.js:19143 performUnitOfWork @ react-dom.development.js:19341 workLoop @ react-dom.development.js:19353 renderRoot @ react-dom.development.js:19436 performWorkOnRoot @ react-dom.development.js:20343 performWork @ react-dom.development.js:20255 performSyncWork @ react-dom.development.js:20229 requestWork @ react-dom.development.js:20098 scheduleWork @ react-dom.development.js:19912 enqueueSetState @ react-dom.development.js:11170./node_modules/react/cjs/react.development.js.Component.setState @ react.development.js:335 (anonymous) @ index.js:104 requestAnimationFrame (async) (anonymous) @ index.js:102 Promise.then (async) (anonymous) @ index.js:100 (anonymous) @ history.js:70 navigate @ history.js:69 (anonymous) @ navigation.js:103 Promise.then (async) navigate @ navigation.js:77 window.___navigate @ navigation.js:150 navigate @ index.js:213 onClick @ index.js:184 onClick @ index.js:464 callCallback @ react-dom.development.js:150 invokeGuardedCallbackDev @ react-dom.development.js:200 invokeGuardedCallback @ react-dom.development.js:257 invokeGuardedCallbackAndCatchFirstError @ react-dom.development.js:271 executeDispatch @ react-dom.development.js:562 executeDispatchesInOrder @ react-dom.development.js:584 executeDispatchesAndRelease @ react-dom.development.js:681 executeDispatchesAndReleaseTopLevel @ react-dom.development.js:689 forEachAccumulated @ react-dom.development.js:663 runEventsInBatch @ react-dom.development.js:817 runExtractedEventsInBatch @ react-dom.development.js:825 handleTopLevel @ react-dom.development.js:4827 batchedUpdates$1 @ react-dom.development.js:20440 batchedUpdates @ react-dom.development.js:2152 dispatchEvent @ react-dom.development.js:4906 (anonymous) @ react-dom.development.js:20491 unstable_runWithPriority @ scheduler.development.js:255 interactiveUpdates$1 @ react-dom.development.js:20490 interactiveUpdates @ react-dom.development.js:2171 dispatchInteractiveEvent @ react-dom.development.js:4883</pre><p> 我应该如何修复此警告?</p></div> - Gatsby Warning: validateDOMNesting(...): <html> cannot appear as a child of <div>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 警告:validateDOMNesting(…):<div> 不能作为孩子出现<tbody> - Warning: validateDOMNesting(…): <div> cannot appear as a child of <tbody> 反应:警告:validateDOMNesting(...):空白文本节点不能作为子节点出现 - React: Warning: validateDOMNesting(…): Whitespace text nodes cannot appear as a child of <tr> 如何修复警告:validateDOMNesting(...):<div> 不能作为孩子出现</div><div id="text_translate"><p>我将用户列表作为道具传递给 UserItem 组件,以迭代用户列表并将它们显示在表上。 列表显示正确,我的渲染返回中没有任何 div,但我仍然收到错误:index.js:1446 Warning: validateDOMNesting(...): cannot appear as a child of.</p><p> 尝试了网上找到的许多解决方案,但没有一个有效</p><p>用户管理代码:</p><pre> import React, { Component } from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import Spinner from './common/Spinner'; import { getUsers } from '../actions/userActions'; import UserItem from './UserItem'; class UsersManagement extends Component { componentDidMount() { if (.this.props.auth.isAuthenticated) { this.props.history;push('/login'). } this.props;getUsers(), } render() { const { users. loading } = this.props;user; let usersList. if (users === null || loading) { usersList = <Spinner /> } else { if (users.length > 0) { usersList = users.map(user => ( <UserItem key={user._id} user={user} /> )) } else { usersList = <h2>No users</h2> } } return ( <div className="row"> <div className="col-12"> <h1 className="text-center mb-2">Users Management</h1> <button type="button" className="btn btn-success mb-4">New User</button> <table className="table"> <thead> <tr> <th scope="col">Options</th> <th scope="col">Username</th> <th scope="col">Email</th> <th scope="col">Phone Number</th> </tr> </thead> <tbody> {usersList} </tbody> </table> </div> </div> ) } } UsersManagement:propTypes = { getUsers. PropTypes.func,isRequired: auth. PropTypes.object,isRequired: user. PropTypes.object:isRequired } const mapStateToProps = state => ({ auth. state,auth: user. state,user }) export default connect(mapStateToProps; { getUsers })(UsersManagement);</pre><p> 用户项目代码:</p><pre> import React, { Component } from 'react'; import PropTypes from 'prop-types'; class UserItem extends Component { render() { const { user } = this.props; console.log(user); return ( <tr> <th scope="row"> <button type="button" className="btn btn-primary fa-xs mr-1"><i className="fas fa-pencil-alt"></i></button> <button type="button" className="btn btn-danger fa-xs"><i className="far fa-trash-alt"></i></button> </th> <td>{user.username}</td> <td>{user.email}</td> <td>{user.phone}</td> </tr> ) } } UserItem.propTypes = { user: PropTypes.object.isRequired } export default UserItem;</pre><p> 我希望修复警告信息</p></div> - How to fix Warning: validateDOMNesting(...): <div> cannot appear as a child of <tbody> Gatsby 警告:validateDOMNesting(...):不能作为子项出现<div></div><div id="text_translate"><p>我正在学习通过几个教程构建 Gatsby 站点。 我正在使用 Gatsby 2.13.50(CLI:2.7.14)。 通常,这些教程会教我们构建基本模板。 当我打开开发工具到控制台时,它加载得很好,除了这个警告:</p><pre> Warning: validateDOMNesting(...): <html> cannot appear as a child of <div>.</pre><p> 警告非常非常长。 我将在我的代码之后发布它的 rest。</p><p> 我的 layout.js 基本模板位于 /src/components/layout.js。 它看起来像这样:</p><pre> import React from "react" const Layout = (props) => { return ( <html lang="en"> <head> <Helmet> <meta charSet="utf-8" /> <title>Demo</title> </Helmet> </head> <body> {props.children} </body> </html> ) } export default Layout</pre><p> 它由 /src/pages/index.js 使用,如下所示:</p><pre> import React from 'react' import Layout from '../components/layout' const IndexPage = () => { return ( <Layout> <h1>Demo onle.</h1> <p>Hello. This totally works fine.</p> </Layout> ) } export default IndexPage</pre><p> 如前所述,它有效,除了开发工具控制台中的非常长的警告。</p><p> 我用谷歌搜索了这个,但还没有发现这是怎么发生的以及如何避免它。 我发现有一个<a href="https://www.gatsbyjs.org/docs/custom-html/" rel="nofollow noreferrer">html.js</a>但我不知道这是否是某种默认模板以及我是否应该覆盖它以用作基本模板。 我试过了,但性能很差,所以我认为我错了。</p><p> 当我删除<html>标签时,我得到: Parsing error: Adjacent JSX elements must be wrapped in an enclosing tag.</p><p> 如果我用<div>替换它 它说<body> cannot appear as a child of <div></p><p> 这是很长的警告:</p><pre> Warning: validateDOMNesting(...): <html> cannot appear as a child of <div>. in html (at layout.js:10) in Layout (at chat.js:6) in ChatPage (created by HotExportedChatPage) in AppContainer (created by HotExportedChatPage) in HotExportedChatPage (created by PageRenderer) in PageRenderer (at json-store.js:93) in JSONStore (at root.js:51) in RouteHandler (at root.js:73) in div (created by FocusHandlerImpl) in FocusHandlerImpl (created by Context.Consumer) in FocusHandler (created by RouterImpl) in RouterImpl (created by Context.Consumer) in Location (created by Context.Consumer) in Router (created by EnsureResources) in ScrollContext (at root.js:64) in RouteUpdates (at root.js:63) in EnsureResources (at root.js:61) in LocationHandler (at root.js:119) in LocationProvider (created by Context.Consumer) in Location (at root.js:118) in Root (at root.js:127) in _default (at app.js:65) __stack_frame_overlay_proxy_console__ @ index.js:2177 warningWithoutStack @ react-dom.development.js:507 validateDOMNesting @ react-dom.development.js:8625 createInstance @ react-dom.development.js:8737 completeWork @ react-dom.development.js:16901 completeUnitOfWork @ react-dom.development.js:19143 performUnitOfWork @ react-dom.development.js:19341 workLoop @ react-dom.development.js:19353 renderRoot @ react-dom.development.js:19436 performWorkOnRoot @ react-dom.development.js:20343 performWork @ react-dom.development.js:20255 performSyncWork @ react-dom.development.js:20229 requestWork @ react-dom.development.js:20098 scheduleWork @ react-dom.development.js:19912 enqueueSetState @ react-dom.development.js:11170./node_modules/react/cjs/react.development.js.Component.setState @ react.development.js:335 (anonymous) @ index.js:104 requestAnimationFrame (async) (anonymous) @ index.js:102 Promise.then (async) (anonymous) @ index.js:100 (anonymous) @ history.js:70 navigate @ history.js:69 (anonymous) @ navigation.js:103 Promise.then (async) navigate @ navigation.js:77 window.___navigate @ navigation.js:150 navigate @ index.js:213 onClick @ index.js:184 onClick @ index.js:464 callCallback @ react-dom.development.js:150 invokeGuardedCallbackDev @ react-dom.development.js:200 invokeGuardedCallback @ react-dom.development.js:257 invokeGuardedCallbackAndCatchFirstError @ react-dom.development.js:271 executeDispatch @ react-dom.development.js:562 executeDispatchesInOrder @ react-dom.development.js:584 executeDispatchesAndRelease @ react-dom.development.js:681 executeDispatchesAndReleaseTopLevel @ react-dom.development.js:689 forEachAccumulated @ react-dom.development.js:663 runEventsInBatch @ react-dom.development.js:817 runExtractedEventsInBatch @ react-dom.development.js:825 handleTopLevel @ react-dom.development.js:4827 batchedUpdates$1 @ react-dom.development.js:20440 batchedUpdates @ react-dom.development.js:2152 dispatchEvent @ react-dom.development.js:4906 (anonymous) @ react-dom.development.js:20491 unstable_runWithPriority @ scheduler.development.js:255 interactiveUpdates$1 @ react-dom.development.js:20490 interactiveUpdates @ react-dom.development.js:2171 dispatchInteractiveEvent @ react-dom.development.js:4883</pre><p> 我应该如何修复此警告?</p></div> - Gatsby Warning: validateDOMNesting(...): <html> cannot appear as a child of <div> 反应<div>不能作为孩子出现<tr>警告 - React <div> cannot appear as a child of <tr> Warning validateDOMNesting(...):文本节点不能作为子节点出现 - validateDOMNesting(…): Text nodes cannot appear as a child of <tbody> 反应:警告:validateDOMNesting(…):文本节点不能显示为以下子项<tbody> - React: Warning: validateDOMNesting(…): Text nodes cannot appear as a child of <tbody> 警告:validateDOMNesting(...):<a>不能作为后代出现</a> - Warning: validateDOMNesting(...): <a> cannot appear as a descendant of <a> 如何修复 validateDOMNesting(...): 不能作为子级出现。 并且列表中的每个孩子都应该有一个唯一的“关键”道具 - How to fix validateDOMNesting(…): <td> cannot appear as a child of <tbody>. and Each child in a list should have a unique “key” prop 警告:validateDOMNesting(...): <form> 不能作为 <form> - Warning: validateDOMNesting(…): <form> cannot appear as a descendant of <form>
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM