react-intl を使用して React アプリで i18n をセットアップしようとしています。アプリはユニバーサル レンダリングされます (つまり、ノードを使用するクライアントとサーバーの両方で)。私が持っているものの基本的な例はこれです:
import React, {Component} from 'react';
import ReactDOM from 'react-dom';
import {IntlProvider, FormattedDate} from 'react-intl';
class App extends Component {
const date = new Date();
render() {
return (
<div>
<FormattedDate value={date} />
</div>
);
}
}
ReactDOM.render(
<IntlProvider locale="en-GB">
<App />
</IntlProvider>,
document.getElementById('container')
);
サーバーでレンダリングされたフォーマットされた日付は、クライアントでレンダリングされた日付とは異なり、反応チェックサムが無効になり、サーバーのレンダリングが破棄されます。サーバーは日付の en-US ロケールを送り返し、ブラウザは en-GB をレンダリングしています
サーバーとブラウザーの両方でこの小さなテストを試しました。
var date = new Date();
console.log(date.toLocaleDateString('en-GB'));
console.log(date.toLocaleDateString('en-US'));
ブラウザでは、次のように記録されます。
"2016/13/04" "2016/4/13"
これは私が期待するものですが、ノードで取得します
"2016/4/13" "2016/4/13"
サーバーでレンダリングされた反応コードのバージョンがブラウザのバージョンと異なるのはなぜでしょうか??
私はちょうどこれが問題だと推測しています。ノードはバージョン v5.4.1 です