自升级到React 16后,我收到以下错误消息:
warning.js:33 Warning: Expected server HTML to contain a matching <div> in <body>.
通常导致此错误消息的原因是什么?如何修复?
Luc*_*cia 18
如果您正在使用 NextJS 之类的服务器端渲染,请删除最近的代码并比较您是否尝试直接访问 DOM 尚不能保证的 Component 范围内的变量。对我来说,它是:
import { i18n } from 'i18n'
export default function SomeComponent() {
const initLanguage = i18n.language <---- causing error
return ...
}
Run Code Online (Sandbox Code Playgroud)
如果您需要访问这些属性,请在 内访问它useEffect,以确保到document那时已经建立。它有点相当于componentDidMount():
import { i18n } from 'i18n'
import { useEffect, useState } from 'react'
export default function SomeComponent() {
const [initlanguage, setInitLanguage] = useState('en')
useEffect(() => setInitLanguage(i18n.language), [])
return ...
}
Run Code Online (Sandbox Code Playgroud)
小智 17
如果您使用ReactDOM.hydrate启动Web应用程序,您将看到此警告.
如果您的应用程序不使用服务器端呈现(ssr),请使用ReactDOM.render启动.
小智 6
如果您的 HTML 代码类似于
<table>
<tr>
Run Code Online (Sandbox Code Playgroud)
你可以得到这个错误。
要解决它,请使用 <tbody> 标签,如
<table>
<tbody>
<tr>
Run Code Online (Sandbox Code Playgroud)
不要忘记关闭标签!
| 归档时间: |
|
| 查看次数: |
15700 次 |
| 最近记录: |