コンポーネントをクライアント側とサーバー側の両方で動作させるのに苦労しています。
これは私のコンポーネントのコードです:
export default class extends React.Component {
constructor(props, context) {
super(props, context);
this.state = {
title: props.params.title,
message: props.params.message
};
}
componentDidMount() {
$.ajax({
url: "/get-message",
success: function (result) {
this.setState({
title: result.title,
message: result.message
});
}.bind(this),
cache: false
});
}
render() {
return (
<div>
<h2>{this.state.title}</h2>
<h3>{this.state.message}</h3>
</div>
);
}
}
それは正常に動作します。クライアント側を介してレンダリングされると、両方が表示され、h2
空h3
になり、ajax 呼び出しが返されると埋められます。
サーバーを介してレンダリングされると、これらの小道具は既に満たされ、クライアントに送信された html はすでに完了しており、余分なものは必要ありません。
問題は、サーバーでレンダリングされると、クライアントでエラー メッセージが表示されることです。
Warning: React attempted to reuse markup in a container but the checksum was invalid. [...]
次に、ajax メソッドを再度呼び出して、すべてを再レンダリングします。
では、このような場合はどのように処理すればよいでしょうか。このコンポーネントがサーバー上でレンダリングされたことを React に伝える方法はありますcomponentDidMount
か?