ton*_*on1 5 reactjs server-side-rendering next.js
我还没有完全理解 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)
Run Code Online (Sandbox Code Playgroud)
===> 发生错误文本内容不匹配。服务器:“无用户”客户端:“用户”
第二
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)
Run Code Online (Sandbox Code Playgroud)
===> 没有错误。
有什么区别?为什么第一个出错而第二个不出错?在邮递员中,当我请求此组件路由来检查服务器端响应时,两者的响应相同(无用户)。
有什么区别?我知道 useEffect 只在客户端执行,但是第一个也更新为“无用户到用户”怎么样。水化点、渲染点是什么时候?
如果没有看到客户端和服务器渲染上的设置方式,我就不能 100% 地了解这一点AuthContext,但从逻辑上向后看,这里的区别似乎是在AuthContext客户端第一次渲染之前已经填充了一个值,但不是在服务器渲染。
这就是为什么在第一个示例中,您的服务器渲染不包含用户,但您的第一个客户端渲染包含用户。AuthContext服务器上没有填充用户,AuthContext客户端上填充了用户,因此第一个客户端渲染与服务器渲染不同,因此出现错误。
在第二个示例中,因为您正在读取仅在使用第一个客户端渲染之后user设置的状态,所以客户端上的第一个渲染也不包含用户 - 因此服务器渲染和第一个客户端渲染之间没有区别,并且没有错误。AuthContext useEffect
| 归档时间: |
|
| 查看次数: |
1869 次 |
| 最近记录: |