質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.37%
Next.js

Next.jsは、Reactを用いたサーバサイドレンダリングなどを行う軽量なフレームワークです。Zeit社が開発しており、nextコマンドでプロジェクトを作成することにより、開発環境整備が整った環境が即時に作成できます。

JavaScript

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

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

React.js

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

Q&A

解決済

1回答

1939閲覧

next jsでuseStateを使うと無限ループになってしまいます

otaaa

総合スコア19

Next.js

Next.jsは、Reactを用いたサーバサイドレンダリングなどを行う軽量なフレームワークです。Zeit社が開発しており、nextコマンドでプロジェクトを作成することにより、開発環境整備が整った環境が即時に作成できます。

JavaScript

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

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

React.js

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

0グッド

0クリップ

投稿2020/04/20 14:45

編集2020/04/22 02:58

前提・実現したいこと

next jsでtypescriptを使って、startAtとendAtを
現在が17月の場合 -> starAtを前年8月、endAtを今年の7月
現在が8
12月の場合 ->starAtを今年の8月、endAtを来年の7月
にしたいです。

エラーメッセージ

Error: Too many re-renders. React limits the number of renders to prevent an infinite loop.
と無限ループになりエラーになっています。

試したこと

ネットで調べたら関数にしたらいいと書いてあってやってみたのですが、ダメでした

typescript

1function axx() { 2 setStartAt( 3 DateTime.local() 4 .set({ month: 8 }) 5 .minus({ year: 1 }) 6 .toJSDate(), 7 ); 8 setEndAt( 9 DateTime.local() 10 .set({ month: 7 }) 11 .toJSDate(), 12 ); 13 } 14 if (1 <= nowMonth && nowMonth <= 7) { 15 axx(); 16 }

該当のソースコード

typescript

1import React, { useState, useEffect } from 'react'; 2import { DateTime } from 'luxon'; 3 4export default function Index() { 5const [startAt, setStartAt] = useState( 6 startOfMonth( 7 DateTime.local() 8 .set({ month: 8 }) 9 .toJSDate(), 10 ), 11 ); 12 const [endAt, setEndAt] = useState( 13 endOfMonth( 14 DateTime.local() 15 .set({ month: 7 }) 16 .plus({ year: 1 }) 17 .toJSDate(), 18 ), 19 ); 20const nowMonth = 21 DateTime.local() 22 .toJSDate() 23 .getMonth() + 1; 24 25if (1 <= nowMonth && nowMonth <= 7) { 26 setStartAt( 27 DateTime.local() 28 .set({ month: 8 }) 29 .minus({ year: 1 }) 30 .toJSDate(), 31 ); 32 setEndAt( 33 DateTime.local() 34 .set({ month: 7 }) 35 .toJSDate(), 36 ); 37 } 38return( 39<input type='month value={strtAt}/> 40<input type='month value={endAt}/> 41) 42}

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

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

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

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

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

guest

回答1

0

自己解決

typesript

1useEffect(() => { 2 if (1 <= nowMonth && nowMonth <= 7) { 3 setStartAt( 4 DateTime.local() 5 .set({ month: 8 }) 6 .minus({ year: 1 }) 7 .toJSDate(), 8 ); 9 setEndAt( 10 DateTime.local() 11 .set({ month: 7 }) 12 .toJSDate(), 13 ); 14 } 15 }, []);

この様にuseeffectを使うとうまくいきました

投稿2020/04/22 07:28

otaaa

総合スコア19

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問