2017-06-01 4 views
0

私は頻繁にコンテンツと新しいReactコンポーネントを追加するデモアプリケーションをまとめています。私は、最新の変更がいつサイトに加えられたかを示すために、コンポーネントreact-timeagoを追加しました。今、私はそのコンポーネントに正しいタイムスタンプを与えたいと思います。私のリアクションwebappでは、「ウェブサイト最終更新日」フィールドに正しい日付を表示するにはどうすればよいですか?

最悪の場合、サーバーが起動された最後の時間を表示できると思います。 webpack-dev-serverをローカルで使用しています。私はまだこのサイトでは公開されていませんが、(webpack-dev-serverのように)私が行うときは速達ベースのソリューションになるでしょう。ですから、サーバ起動エントリのための高速生成ログファイルでgrepを実行することも可能です。それを解決することは、ある程度問題を解決するだろう。コンテンツの追加は再起動を必要としないが、この解決法はおそらく理想的ではないが、注目に値する。おそらく、私はこれのために何らかのミドルウェア(ロガーなど)を明示的に使用することができます。

別の考えられる方法は、最後に変更が加えられたことを記録する何らかの種類のディレクトリ監視メカニズムです。何とかこれを還元状態にする必要がありますか?利用可能なコンポーネントがたくさんあるので、これを達成するためにどの領域を組み合わせるのが難しいのですか(この分野で私の経験が限られています)。

私のサイトは軽量のシングルページャーです。この段階では、私には過剰なデータのように見えるデータストアを追加するのは嫌です。

私はwebpack 2を使用していることも言及できます。それ以外にも、それは本当に基本的なReactアプリであり、いくつかのコンポーネントがあります。

要約すると、追加されたコンテンツ(mp3ファイルなど)や変更されたコードファイルを探して、タイムスタンプを自分の反応時間コンポーネントに追加する方法をまとめたものです。

+1

[Webpack.DefinePlugin](https://webpack.js.org/plugins/define-plugin/)を使用してコンパイル時に定数として挿入できますか? –

+0

@JoeClay興味深いです...単純なバージョンでは、現在の時刻を保存することができます。そして、より高度なバージョンはおそらくプラグインの内部にディレクトリウォッチのアイデアを適応させることでしょう...どのように見えるかもしれない考え? – sinewave440hz

+0

Webpack.DefinePluginを使用すると、サーバーの開始時間をアプリに与えている限り、このトリックが実行されました。すばらしいです!私が言ったように、これのもう1つの部分は、新しいファイルをコンテンツに追加するときに、前記タイムスタンプを更新することです。正直なところ、そのようなコンテンツを更新する機能はまだ実装されていないため、コンテンツを追加する唯一の方法はコード内にあるからです。これで今のところ私の問題は解決しますが、代替の開始時間の提案と、コンテンツディレクトリを見て、新しいコンテンツが追加されたときの「最終更新日時」を更新する方法の提案の両方について、もう少し長く開いておきます。 – sinewave440hz

答えて

0

@Joe Clayが示唆したように、Webpack.DefinePluginを使用して、再起動時に現在の時刻を定数に入力しました。これがうまく働いた、私は私のwebpack.config.jsに以下の行を追加しました:

var dateString = new Date().toDateString(); 
 
    ... 
 
    new webpack.DefinePlugin({ 
 
     LAST_UPDATED: JSON.stringify(dateString) 
 
    })

そして、私のリアクトコンポーネントで定数にアクセスすることができました:

<div style={{marginTop:120}}>A sinewave440hz demo site.<br/> 
 
    This site was updated 
 
    <TimeAgo date={LAST_UPDATED} formatter={formatter}/>. 
 
</div>

アセットの変更を星座で記録することもできます資産の前の状態がどこかに記録されていれば、

関連する問題