如何让React rehydration忽略特定组件的校验和?

问题描述:

补液时,React会在初始渲染标记与正好与不匹配时发生抱怨。然而,某些组件在客户端和服务器端不会产生相同的结果并不罕见。最平凡,认为显示当前时间的成分:如何让React rehydration忽略特定组件的校验和?

function Now() { 
    return <span>{ new Date().toString() }</span>; 
} 

显然,这样的组件将在每次呈现的时间显示不同的值,因此会做出反应总是警告不正确的校验和。

如何告诉React,如果客户端为特定组件呈现与服务器不同的东西,那么可以吗?

回答我的问题,因为阵营V16 the documentation说,这一下:

如果您有意需要渲染的东西服务器和客户端上的不同,你可以做一个双通道渲染。在客户端上呈现不同内容的组件可以读取类似this.state.isClient的状态变量,您可以在componentDidMount()中将其设置为true。通过这种方式,初始渲染过程将呈现与服务器相同的内容,从而避免不匹配,但是在水合之后还会同步发生额外的传递。请注意,这种方法会让组件变得更慢,因为它们必须渲染两次,所以请谨慎使用它。