【问题标题】:Nextjs not render as expected and throw "Warning Prop `style` did not match." when using inline style [duplicate]Nextjs 未按预期呈现并抛出“警告道具`样式`不匹配。”使用内联样式时[重复]
【发布时间】:2021-11-30 01:01:09
【问题描述】:

问题描述

我的 nextjs 应用程序出现问题。在某些组件中,我想在 CSR/SSR 之间添加一些不同的样式/类名。这是我的问题的简化演示代码。

index.jsx

import React, { useEffect, useState } from 'react'

export default function index() {
  const [isServer, setIsServer] = useState(typeof window === 'undefined')
  const style = {
    color: isServer ? 'red' : 'yellow',
  }
  console.log('SeverSide: isServer', isServer)

  useEffect(() => {
    setIsServer(typeof window === 'undefined')
    console.log('ClientSide: isServer', isServer)
  }, [])
  return (
    <div>
      <h1 style={style}>Hi I am Danny</h1>
    </div>
  )
}

依赖版本

使用 npx create-npx-app 构建的演示项目

"dependencies": {
    "next": "11.1.2",
    "react": "17.0.2",
    "react-dom": "17.0.2"
  }

预期和实际结果

我希望看到 h1 颜色是黄色的,但这就是我得到的

虽然isServer的状态确实发生了变化,但是样式并没有应用。

我不确定这里是否缺少任何核心概念,对结果感到非常困惑。

我尝试过的

在谷歌上搜索错误消息后,我能找到的大多数帖子都与将 styled-component 与 nextjs 一起使用有关,例如 this post。但我认为这不适用于我的情况。

在这里停留了很长时间,如果有任何建议,将不胜感激。

如果我没有说清楚,请告诉我,感谢您的阅读!

【问题讨论】:

  • 也许你更喜欢使用类名和单独的css而不是内联样式?
  • @SerkanAKMAN 我确实尝试使用类名来解决这个问题。但是结果还是一样,只是抛出了不同的信息 Warning: Prop className did not match。 h1 的颜色还是红色。
  • 这是否回答了您的问题:Warning: Text content did not match. Server: "I'm out" Client: "I'm in" div NEXTJS?在浏览器上呈现的 HTML 与在服务器上生成的不匹配,因为 typeof window === 'undefined' 在两者中返回的内容不同。
  • @juliomalves 确实如此!非常感谢您的帮助

标签: reactjs next.js


【解决方案1】:

这个快速破解对我有用。

const [isServer, setIsServer] = useState(true)

【讨论】:

  • 感谢您的回复!我也确实在我的实际项目中使用了这种方法,效果很好。只是想知道为什么我原来的方法会引起问题,所以我问了这个问题。
猜你喜欢
  • 2018-03-11
  • 2019-08-01
  • 2018-06-26
  • 2019-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-01
相关资源
最近更新 更多