【发布时间】:2016-09-29 08:59:07
【问题描述】:
我们目前正在使用 ReactJS 进行开发。当我们查看控制台时,我们总是会看到 ReactJS 发出的这个警告:
警告:React 试图在容器中重用标记,但是 校验和无效。这通常意味着您正在使用服务器 渲染和服务器上生成的标记不是 客户期待。 React 注入了新的标记来弥补 可以,但是您已经失去了服务器渲染的许多好处。 相反,要弄清楚为什么生成的标记在 客户端或服务器:
(client) autosuggest__input" data-reactid="9"></d (server) autosuggest__input" placeholder="Value
问题很简单——我们有一个输入字段,它将获得一个占位符。在客户端,内容将被设置为反应式,因此它是异步的。在服务器端,该值将设置为同步,因为异步是不可能的。最终值相同。但是因为在客户端它的异步反应总是丢弃这个错误。
当我们在客户端使用异步值但在服务器上使用同步时,是否有“正确”的方式来做到这一点?
在客户端它的异步/反应,因为我们使用 MeteorJS 使其反应。
【问题讨论】:
-
这个问题有一些建议,它们在这里有没有积极作用?:stackoverflow.com/questions/33521047/…
-
尝试让客户端修改最初从服务器渲染的组件的状态,而不是渲染自己的组件
-
@MarkSchultheiss 所以你的意思是它不正确 o 通过道具分配反应性数据,而不是反应性必须仅处于状态?但是如何将数据库中的数据分配为组件的属性,这些属性在客户端异步获取但在服务器上同步?也许我只是不明白你的意思——也许你能解释一下?
-
我对该区域的同构进行了快速搜索并发现了这一点:jeffhandley.github.io/QuickReactions/15-isomorphic-aim.html 不确定它是否是您答案的 100%,但它涵盖了类似的问题 对部分错误的搜索也可能帮助您:“React 尝试在容器中重用标记,但校验和无效。”
-
感谢@MarkSchultheiss 我现在已经修复了我的应用程序代码,因此每个“反应性”道具数据都将转换为状态,并且我只在数据是反应性的时候在我的组件中使用这些状态。它现在工作正常 - 但它是一个丑陋的解决方法。也许我很快就会找到更好的解决方案。如果您想获得赏金,我认为您必须写一个“真实”的答案而不是评论:) 谢谢!