質問編集履歴

6

編集

2024/09/19 10:13

投稿

shin114
shin114

スコア1

test CHANGED
File without changes
test CHANGED
@@ -2,7 +2,7 @@
2
2
  ReactのLoginPageコンポーネントで、Axiosを用いたPOSTリクエストを実装しています。VSCode上では正常に動作しているのですが、ESLintの実行時に下記のようなエラーが発生します。エラーは、型の安全性に関連しているようです。
3
3
 
4
4
  エラーメッセージ:
5
- ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2024-09-08/38f9d5d0-f01c-4434-99fb-f0356f80aa22.png)
5
+ ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2024-09-19/ae28c6dd-7e12-4cfc-bffc-e55f0ec34404.png)
6
6
  状況:
7
7
  npm run lintを実行した際に、上記のESLintエラーが表示されます。
8
8
  @typescript-eslint/no-unsafe-assignmentや@typescript-eslint/no-unsafe-callといった型安全性に関するルールで引っかかっているようです。
@@ -13,23 +13,36 @@
13
13
  エラー箇所において、型アサーションや例外処理などを試しましたが、ESLintの警告を取り除くことができません。
14
14
 
15
15
  コードの該当箇所:
16
- ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2024-09-08/7c90af43-908b-466f-bc93-07f1efdeee2f.png)
16
+
17
17
 
18
18
  ### 修正版:ヘディングのテキストコードの該当箇所:
19
19
  import { Typography } from '@material-tailwind/react';
20
- import axios, { AxiosResponse } from 'axios';
20
+ import axios, { AxiosResponse } from 'axios'; // AxiosErrorを追加
21
21
  import React, { useState } from 'react';
22
-
23
22
  import InputCheckboxComponent from '@/components/atoms/input_checkbox';
24
23
  import InputTextComponent from '@/components/atoms/input_text';
25
24
  import LinkComponent from '@/components/atoms/link';
26
25
  import FormCard from '@/components/molecules/formCard';
27
26
  import DefaultComponent from '@/components/templates/default';
28
27
 
29
- import { LoginResponse } from './type';
28
+ // import { LoginResponse } from './type';
29
+
30
+ // LoginResponse型の定義
31
+ interface LoginResponse {
32
+ authorization?: {
33
+ token: string;
34
+ };
35
+ }
36
+
37
+ // 環境変数の型定義
38
+ declare const process: {
39
+ env: {
40
+ REACT_APP_API_URL?: string;
41
+ };
42
+ };
30
43
 
31
44
  export default function LoginPage() {
32
- const [email, setEmail] = useState('');
45
+ const [email, setEmail] = useState<string>('');
33
46
 
34
47
  const API_URL = process.env.REACT_APP_API_URL;
35
48
 
@@ -39,7 +52,7 @@
39
52
 
40
53
  const handleSubmit = async (event: React.FormEvent<HTMLFormElement>) => {
41
54
  event.preventDefault();
42
- const formData = new FormData(event.currentTarget);
55
+ const formData = new FormData(event.currentTarget);
43
56
  const password = formData.get('password');
44
57
 
45
58
  if (typeof password === 'string') {
@@ -49,8 +62,8 @@
49
62
  const response: AxiosResponse<LoginResponse> = await axios.post<LoginResponse>(API_URL, data, {
50
63
  headers: { 'Content-Type': 'application/json' },
51
64
  });
52
- if (response.data.authorization) {
65
+ if (response.data && 'authorization' in response.data && response.data.authorization) {
53
- const token = response.data.authorization.token;
66
+ const token: string = response.data.authorization.token;
54
67
  console.log('Token:', token);
55
68
  } else {
56
69
  console.error('Invalid response structure');
@@ -80,6 +93,8 @@
80
93
  ESLintバージョン: v8.57.0
81
94
  TypeScriptバージョン: Version 5.5.3
82
95
  axiosバージョン: axios@1.7.7
96
+ reactバージョン:@material-tailwind/react@2.1.9
97
+ │ └─ react@18.2.0
98
+ └─ react@18.3.1
83
99
 
84
100
 
85
-

5

修正

2024/09/10 00:28

投稿

shin114
shin114

スコア1

test CHANGED
File without changes
test CHANGED
@@ -16,6 +16,18 @@
16
16
  ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2024-09-08/7c90af43-908b-466f-bc93-07f1efdeee2f.png)
17
17
 
18
18
  ### 修正版:ヘディングのテキストコードの該当箇所:
19
+ import { Typography } from '@material-tailwind/react';
20
+ import axios, { AxiosResponse } from 'axios';
21
+ import React, { useState } from 'react';
22
+
23
+ import InputCheckboxComponent from '@/components/atoms/input_checkbox';
24
+ import InputTextComponent from '@/components/atoms/input_text';
25
+ import LinkComponent from '@/components/atoms/link';
26
+ import FormCard from '@/components/molecules/formCard';
27
+ import DefaultComponent from '@/components/templates/default';
28
+
29
+ import { LoginResponse } from './type';
30
+
19
31
  export default function LoginPage() {
20
32
  const [email, setEmail] = useState('');
21
33
 
@@ -27,8 +39,7 @@
27
39
 
28
40
  const handleSubmit = async (event: React.FormEvent<HTMLFormElement>) => {
29
41
  event.preventDefault();
30
-
31
- const formData = new FormData(event.currentTarget);
42
+ const formData = new FormData(event.currentTarget);
32
43
  const password = formData.get('password');
33
44
 
34
45
  if (typeof password === 'string') {
@@ -38,7 +49,6 @@
38
49
  const response: AxiosResponse<LoginResponse> = await axios.post<LoginResponse>(API_URL, data, {
39
50
  headers: { 'Content-Type': 'application/json' },
40
51
  });
41
-
42
52
  if (response.data.authorization) {
43
53
  const token = response.data.authorization.token;
44
54
  console.log('Token:', token);

4

コード追加

2024/09/09 00:27

投稿

shin114
shin114

スコア1

test CHANGED
File without changes
test CHANGED
@@ -16,7 +16,48 @@
16
16
  ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2024-09-08/7c90af43-908b-466f-bc93-07f1efdeee2f.png)
17
17
 
18
18
  ### 修正版:ヘディングのテキストコードの該当箇所:
19
+ export default function LoginPage() {
20
+ const [email, setEmail] = useState('');
21
+
22
+ const API_URL = process.env.REACT_APP_API_URL;
23
+
24
+ if (!API_URL) {
25
+ throw new Error('API URL is not defined in the environment variables');
26
+ }
27
+
28
+ const handleSubmit = async (event: React.FormEvent<HTMLFormElement>) => {
29
+ event.preventDefault();
30
+
31
+ const formData = new FormData(event.currentTarget);
32
+ const password = formData.get('password');
33
+
34
+ if (typeof password === 'string') {
35
+ const data = { email, password };
36
+ console.log(data);
37
+ try {
38
+ const response: AxiosResponse<LoginResponse> = await axios.post<LoginResponse>(API_URL, data, {
39
+ headers: { 'Content-Type': 'application/json' },
40
+ });
41
+
42
+ if (response.data.authorization) {
43
+ const token = response.data.authorization.token;
44
+ console.log('Token:', token);
45
+ } else {
46
+ console.error('Invalid response structure');
47
+ }
48
+ } catch (error) {
49
+ if (axios.isAxiosError(error)) {
19
- ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2024-09-09/4dde462c-5194-4b80-aa04-ca90624a8659.png)
50
+ console.error('Axios error:', error.response?.data ?? 'No response data');
51
+ } else if (error instanceof Error) {
52
+ console.error('Unexpected error:', error.message);
53
+ } else {
54
+ console.error('An unknown error occurred');
55
+ }
56
+ }
57
+ } else {
58
+ console.error('Password is not valid');
59
+ }
60
+ };
20
61
 
21
62
  質問:
22
63
  このエラーはどのように対処すればよいのでしょうか?

3

写真追加

2024/09/08 15:02

投稿

shin114
shin114

スコア1

test CHANGED
File without changes
test CHANGED
@@ -15,6 +15,8 @@
15
15
  コードの該当箇所:
16
16
  ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2024-09-08/7c90af43-908b-466f-bc93-07f1efdeee2f.png)
17
17
 
18
+ ### 修正版:ヘディングのテキストコードの該当箇所:
19
+ ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2024-09-09/4dde462c-5194-4b80-aa04-ca90624a8659.png)
18
20
 
19
21
  質問:
20
22
  このエラーはどのように対処すればよいのでしょうか?

2

写真に変更

2024/09/08 11:11

投稿

shin114
shin114

スコア1

test CHANGED
File without changes
test CHANGED
@@ -2,11 +2,7 @@
2
2
  ReactのLoginPageコンポーネントで、Axiosを用いたPOSTリクエストを実装しています。VSCode上では正常に動作しているのですが、ESLintの実行時に下記のようなエラーが発生します。エラーは、型の安全性に関連しているようです。
3
3
 
4
4
  エラーメッセージ:
5
- ./components/pages/login/login.tsx
6
- 33:15 Error: Unsafe assignment of an error typed value. @typescript-eslint/no-unsafe-assignment
7
- 33:62 Error: Unsafe call of an `error` type typed value. @typescript-eslint/no-unsafe-call
8
- 33:68 Error: Unsafe member access .post on an `error` typed value. @typescript-eslint/no-unsafe-member-access
5
+ ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2024-09-08/38f9d5d0-f01c-4434-99fb-f0356f80aa22.png)
9
-
10
6
  状況:
11
7
  npm run lintを実行した際に、上記のESLintエラーが表示されます。
12
8
  @typescript-eslint/no-unsafe-assignmentや@typescript-eslint/no-unsafe-callといった型安全性に関するルールで引っかかっているようです。

1

写真に変えた

2024/09/08 11:10

投稿

shin114
shin114

スコア1

test CHANGED
File without changes
test CHANGED
@@ -17,27 +17,8 @@
17
17
  エラー箇所において、型アサーションや例外処理などを試しましたが、ESLintの警告を取り除くことができません。
18
18
 
19
19
  コードの該当箇所:
20
- try {
21
- const response: AxiosResponse<LoginResponse> = await axios.post<LoginResponse>(API_URL, data, {
20
+ ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2024-09-08/7c90af43-908b-466f-bc93-07f1efdeee2f.png)
22
- headers: { 'Content-Type': 'application/json' },
23
- });
24
21
 
25
- if (response.data.authorization) {
26
- const token = response.data.authorization.token;
27
- console.log(`Token: ${token}`);
28
- } else {
29
- console.error('Invalid response structure');
30
- }
31
- } catch (error) {
32
- if (axios.isAxiosError(error)) {
33
- const axiosError = error as AxiosError<LoginResponse>;
34
- console.error('Axios error:', axiosError.response?.data ?? 'No response data');
35
- } else if (error instanceof Error) {
36
- console.error('Unexpected error:', error.message);
37
- } else {
38
- console.error('An unknown error occurred');
39
- }
40
- }
41
22
 
42
23
  質問:
43
24
  このエラーはどのように対処すればよいのでしょうか?