gpt4 book ai didi

reactjs - 在 SSR 上 react 水合作用

转载 作者:行者123 更新时间:2023-12-03 23:06:36 25 4
gpt4 key购买 nike

我没有完全理解 React 的 Server Side Rendering .
两个例子之间发生了什么不同的行为?

第一

function Test() {
const context = useContext(AuthContext)
const { user } = context

return (
user ? <h1>User</h1> : <h1>No User</h1>
)
}

export default withApollo({ ssr: true })(Test)

===> 发生错误 文本内容不匹配。服务器:“无用户”客户端:“用户”

第二
function Test() {
const context = useContext(AuthContext)
const [ user, setUser ] = useState(null)

useEffect(() => {
setUser(context.user)
}, [])

return (
user ? <h1>User</h1> : <h1>No User</h1>
)
}

export default withApollo({ ssr: true })(Test)

===> 没有错误。

有什么区别?为什么第一个出错而第二个没有?在 Postman 中,当我请求此组件路由以检查服务器端响应时,两者的响应是相同的(无用户)。

有什么区别? useEffect 只在客户端执行,我知道,但是第一个也更新为 No User to User 怎么样。什么时候是水合点,渲染点?

最佳答案

如果不了解如何 AuthContext,我就无法 100% 做到这一点。在客户端和服务器渲染上都设置了,但从逻辑上讲,这里的区别似乎是 AuthContext已经在客户端第一次渲染之前填充了一个值,但不是在服务器渲染之前。

这就是为什么在第一个示例中您的服务器渲染不包含用户,但您的第一个客户端渲染包含一个用户。 AuthContext 中没有用户在服务器上,AuthContext在客户端上填充了用户,因此第一个客户端渲染与服务器渲染不同,因此出现错误。

在第二个示例中,因为您正在阅读 user来自仅从 AuthContext 设置的状态在第一个客户端使用 useEffect 渲染之后,客户端上的第一个渲染也不包含用户 - 因此服务器渲染和第一个客户端渲染之间没有区别,并且没有错误。

关于reactjs - 在 SSR 上 react 水合作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62206994/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com