これは私のJSXです:
<h4>{post.title} <small> (by {post.author})</small> </h4>
これは、サーバー上で ( を使用してReact.renderComponentToString()
) 生成され、クライアントに送信されるものです。
<h4 data-reactid=".2ggx1vlvrwg.1.0.0.$posts-about.$2.0">
<span data-reactid=".2ggx1vlvrwg.1.0.0.$posts-about.$2.0.0">Why JavaScript is eating the world.</span>
<span data-reactid=".2ggx1vlvrwg.1.0.0.$posts-about.$2.0.1"> </span>
<small data-reactid=".2ggx1vlvrwg.1.0.0.$posts-about.$2.0.2">
<span data-reactid=".2ggx1vlvrwg.1.0.0.$posts-about.$2.0.2.0"> (by </span>
<span data-reactid=".2ggx1vlvrwg.1.0.0.$posts-about.$2.0.2.1">spike</span>
<span data-reactid=".2ggx1vlvrwg.1.0.0.$posts-about.$2.0.2.2">)</span>
</small>
<span data-reactid=".2ggx1vlvrwg.1.0.0.$posts-about.$2.0.3"></span>
</h4>
そして、これはクライアント側(ブラウザ内)で生成されるものです:
<h4 data-reactid=".0.1.0.0.$posts-about.$2.0">
<span data-reactid=".0.1.0.0.$posts-about.$2.0.0">Why JavaScript is eating the world.</span>
<small data-reactid=".0.1.0.0.$posts-about.$2.0.1">
<span data-reactid=".0.1.0.0.$posts-about.$2.0.1.0"> (by </span>
<span data-reactid=".0.1.0.0.$posts-about.$2.0.1.1">spike</span>
<span data-reactid=".0.1.0.0.$posts-about.$2.0.1.2">)</span>
</small>
</h4>
どうやら 2 つのスパンが欠落しており、それが原因React attempted to use reuse markup in a container but the checksum was invalid
です。エラー。
問題はJSXコンパイラにあると思います。バンドルされてクライアントに送信される生成された JavaScript は、サーバーが使用しているものとは異なります。
面白いことに、JSX のインデントを「修正」すると、うまくいきます。サーバーとクライアントの両方が、これらの余分なスパンなしで同じ HTML マークアップを生成します。
<h4>{post.title}
<small> (by {post.author})</small>
</h4>
ただし、JSX インデント幅に注意することについてのドキュメントを読んだことがなく、この種の問題をデバッグするのが難しい (または少なくとも煩わしい) ため、少し緊張します。