こんにちは、cukuさん。
- 1日引いた日の出し方
- console.logのエラー
について順に説明します。
0. ベースの定義
まずはベースのコードを定義してから回答します。
index.js(正しくは index.tsx でしょうか?)
クラスで書くなら
JavaScript
1export default class Index extends React.Component {
2 render() {
3 return (
4 <Day
5 disabledDays={Calendar.getDisabledDays()}
6 />
7 );
8 }
9}
10
関数で書くなら
JavaScript
1const Index = () => {
2 return (
3 <Day
4 disabledDays={Calendar.getDisabledDays()}
5 />
6 );
7};
8
9export default Index;
となると思います。
1. 1日引いた日の出し方
エラーについて
{Calender.getDisabledays().getDate() - 1}などやりましたがdefault.getDisabledDays(...).getDate is not a functionなどのエラーが出てうまくいきません
thyda.eiqau
さんが仰っているように、この Calender.getDisableDays()
という関数実行は、
DisabledDays {
after: Date
before: Date
}
という DisabledDays
型のobjectとして、値が返っているので、 Calender.getDisableDays()
の返した値から直接 getDate()
を呼び出すことはできません。
const disabledDays: DisabledDays = Calender.getDisableDays();
disabledDays.after => OK
disabledDays.before => OK
disabledDays.toDate() => NG
本題
{Calender.getDisabledays()}から1日引いた日を出したいのですがどうしたらいいでしょうか?
上記のように、 before
と after
の2つの Date
型が取れている状況なので、 before
か after
のどちらかを指定して1日引く必要があります。
なので、
const disabledDays: DisabledDays = Calender.getDisableDays();
const disabledDaysFromAfter: Date = moment(disabledDays.after).subtract(1, 'days').toDate();
const disabledDaysFromBefore: Date = moment(disabledDays.before).subtract(1, 'days').toDate();
とすれば、 before
または after
の1日前の Date
の値が取れると思います。
2. console.logのエラー
こちらに関しては、クラス記法でも関数記法でも同じなのですが、以下のように書くとエラーになります。
クラス
JavaScript
1export default class Index extends React.Component {
2 render() {
3 return (
4 console.log('this is console.log wrong position.');
5 <Day
6 disabledDays={Calendar.getDisabledDays()}
7 />
8 );
9 }
10}
11
関数
JavaScript
1const Index = () => {
2 return (
3 console.log('this is console.log wrong position.');
4 <Day
5 disabledDays={Calendar.getDisabledDays()}
6 />
7 );
8};
9
10export default Index;
ここで return
で解釈できるコードは JSX
と言われる記法のことで、基本的には HTML
のようなタグを利用したものを入力することになります。そのため return
内に JSX
を解釈する以外のコードがあったため、エラーが発生したのだと思います。
正しくは、
クラス
JavaScript
1export default class Index extends React.Component {
2 render() {
3 console.log('this is console.log right position.');
4
5 return (
6 <Day
7 disabledDays={Calendar.getDisabledDays()}
8 />
9 );
10 }
11}
12
関数
JavaScript
1const Index = () => {
2 console.log('this is console.log right position.');
3
4 return (
5 <Day
6 disabledDays={Calendar.getDisabledDays()}
7 />
8 );
9};
10
11export default Index;
のように記載すれば、確認することができると思います。
以上、長くなりましたが、参考になれば幸いです。
2019/12/23 16:30追記
コメントで頂いていた内容を追記します。
index.jsはmoment.jsを使うことができないのですがどうしたらいいでしょうか?
(1)で、momentを読み込んでいます。TypeScriptであれば(1)、(1)でうまく読み込めなければ、(1)' で読み込めるのではと思います。
上記の処理はindex.jsに書くということでいいでしょうか?
(2)の部分で展開してもらえると良いと思います。
クラス
JavaScript
1import * as moment from 'moment'; // ... (1)
2const moment = require('moment'); // ... (1)'
3
4export default class Index extends React.Component {
5 render() {
6 // ... (2)
7 const disabledDays: DisabledDays = Calender.getDisableDays();
8 const disabledDaysFromAfter: Date = moment(disabledDays.after).subtract(1, 'days').toDate();
9 const disabledDaysFromBefore: Date = moment(disabledDays.before).subtract(1, 'days').toDate();
10
11 return (
12 <Day
13 disabledDays={/* 必要な値を渡す */}
14 />
15 );
16 }
17}
18
関数
JavaScript
1import * as moment from 'moment'; // ... (1)
2const moment = require('moment'); // ... (1)'
3
4const Index = () => {
5 // ... (2)
6 const disabledDays: DisabledDays = Calender.getDisableDays();
7 const disabledDaysFromAfter: Date = moment(disabledDays.after).subtract(1, 'days').toDate();
8 const disabledDaysFromBefore: Date = moment(disabledDays.before).subtract(1, 'days').toDate();
9
10 return (
11 <Day
12 disabledDays={/* 必要な値を渡す */}
13 />
14 );
15};
16
17export default Index;