Hydration failed because the initial UI does not match what was rendered on the server.问题原因之一

一. 环境
next.js: “12.1.6”
react.js: “18.1.0”
三. 报错内容

在这里插入图片描述

三. 报错原因
3.1 第一种情况

p标签嵌套了p标签或者p标签嵌套了div标签,如下如:

在这里插入图片描述
将p的子标签改为span或者将父级p标签改为div也行。

一般来说,我们不会用p来嵌套div,也不能来嵌套。

需要注意的就是next.js中不允许p标签嵌套p标签。

3.1 第二种情况

首页有如下弹框:

在这里插入图片描述
当勾选确认且点击Confirm后,就会在本地存储一个状态,有这个状态的话就不再弹这个弹框,没有的话就需要弹出来。代码如下:

const [showHomeModel, setShowHomeModel] = useState(true)
useEffect(() => {
    if (localStorage.getItem('alreadyChecked')) {
      setShowHomeModel(false)
    } else {
      setShowHomeModel(true)
    }
}, [])
// 弹框组件
<HomeModel visibleInfo={showHomeModel} changeVisible={setShowHomeModel} />

结果每次进入页面都会报上面那个错误!

仔细分析了下,首次进入页面时,是没有状态的,所有useEffect里面走的是else条件,会把showHomeModel设置为true,而useState设置的showHomeModel初始值也为true,这样就引起了上面的报错。

所以代码改一下const [showHomeModel, setShowHomeModel] = useState(false)就不报那个错了。没有状态的时候进入页面也一定会拉起弹窗。

(完)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值