🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

1回答

728閲覧

Reactのアロー関数の中では何時・何分・何秒は取得できないのか

of_the_Europa

総合スコア66

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

0クリップ

投稿2020/12/23 03:53

前提・実現したいこと

ブラウザ上に「現在時刻は何時何分何秒です」と表示させ、その時間に合わせて「おはようございます」「こんにちは」などの挨拶の分岐を実現させたいと思っています。
時間を表示させるだけならば、renderの中で何時・何分・何秒をそれぞれ変数で渡してしまえば済む話かもしれませんが、その時間によって挨拶を分岐させるのであれば、初期値を設定させてからそれぞれのタイムスケールをアロー関数で定義する必要があるのでは? と考えました。
しかし、アロー関数の中でのgetHours()、getMinutes()、getSeconds()はコンソールの表示でも試してみましたが、すべてunderfindでした。

問題のコード

import React from 'react'; export default class Time extends React.Component{ constructor(props){ super(props); this.state = { now: new Date().toLocaleString() } } Hour = () => { this.setState((state) => { return ( this.now = this.state.now.getHours() ) }) } Min = () => { this.setState((state) => { return ( this.now = this.state.now.getMinutes() ) }) } Sec = () => { this.setState((state) => { return ( this.now = this.state.now.getSeconds() ) }) } /* greeting(){    if(5<=this.Hour && this.Hour<=10){ 'おはようございます'  }else if(10<=this.Hour && this.Hour<=17){ 'こんにちは'  }else if(17<=this.Hour && this.Hour<=21){ 'こんばんみ'  }else{ 'おやすみなさい' } } */ render(){ return( <div> <h3>{this.greeting}</h3> <p>現在の時刻は{this.Hour}時{this.Min}分{this.Sec}秒です。</p> </div> ) } }

時間別の条件分岐はとりあえずコメントアウトにして、今は時間の取得とその表示だけを試しているところです。

初心者なりの想像で記述している部分があるので、恐らく基本がなっていないかもしれません。
そもそもgetHours()、getMinutes()、getSeconds()をアロー関数で定義するのが適しているのかどうかも認識として怪しいです。
どなたかお力をいただけたら幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

アロー関数の中でのgetHours()、getMinutes()、getSeconds()はコンソールの表示でも試してみましたが、すべてunderfindでした。

はい、this.state.nowに代入したのはnew Date().toLocaleString()という文字列ですので、これらのメソッドはありません。

投稿2020/12/23 03:56

maisumakun

総合スコア145975

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問