質問編集履歴
5
修正
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
next.jsでEditと
|
1
|
+
next.jsでEditボタンを押すとloading...になってしまう。
|
test
CHANGED
File without changes
|
4
修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -16,12 +16,13 @@
|
|
16
16
|
```
|
17
17
|
|
18
18
|
ツリー構造
|
19
|
-
![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2024-08-18/994a80e8-543c-4397-b2e5-09429399b8c9.png)
|
20
|
-
|
21
|
-
![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2024-08-18/
|
19
|
+
![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2024-08-18/86312f48-0516-4bfd-8017-11c143d5a788.png)
|
20
|
+
|
21
|
+
![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2024-08-18/623760b5-2ce8-49da-b99d-d37057efca17.png)
|
22
|
+
|
22
23
|
### 該当のソースコード
|
23
24
|
|
24
|
-
|
25
|
+
|
25
26
|
```/backend/app/controllers/todos_controller.rb
|
26
27
|
class TodosController < ApplicationController
|
27
28
|
|
3
修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -16,7 +16,7 @@
|
|
16
16
|
```
|
17
17
|
|
18
18
|
ツリー構造
|
19
|
-
![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2024-08-18/a
|
19
|
+
![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2024-08-18/994a80e8-543c-4397-b2e5-09429399b8c9.png)
|
20
20
|
|
21
21
|
![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2024-08-18/70a06e18-b2cc-4333-8a5c-01ff62344e55.png)
|
22
22
|
### 該当のソースコード
|
2
修正
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
next.jsでEdit
|
1
|
+
next.jsでEditとshow仕方が分からない
|
test
CHANGED
@@ -1,33 +1,24 @@
|
|
1
1
|
### 実現したいこと
|
2
2
|
|
3
|
-
|
3
|
+
qiitaで一週間回答を求めたんですが....
|
4
4
|
答えにたどり着けず.....
|
5
5
|
|
6
6
|
解決したいこと
|
7
7
|
https://qiita.com/gabakugik/items/b0fcc09158d336e9e2a8
|
8
8
|
の続きです。
|
9
|
-
|
9
|
+
|
10
|
-
|
11
|
-
Nexts.jsとRuby on RailsでCRUDWebアプリをつくっています。
|
12
|
-
Editボタンを押すと飛ぶようになりましたが更新ができません。
|
13
|
-
解決方法を教えて下さい。
|
14
|
-
またツリー構造に書きますが、page.tsxが2つ必要になりました。
|
15
|
-
一つにまとめたい。
|
16
|
-
|
17
|
-
この情報が欲しいとかあれば出しますのでよろしくお願いします。
|
18
10
|
|
19
11
|
|
20
12
|
### 発生している問題・エラーメッセージ
|
21
13
|
|
22
14
|
```
|
23
|
-
|
15
|
+
updateボタンを押すとLoading画面になる。
|
24
16
|
```
|
25
17
|
|
26
18
|
ツリー構造
|
27
|
-
|
19
|
+
![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2024-08-18/a2f2403f-5b9e-46a3-89f2-b6a41f863193.png)
|
20
|
+
|
28
|
-
![
|
21
|
+
![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2024-08-18/70a06e18-b2cc-4333-8a5c-01ff62344e55.png)
|
29
|
-
|
30
|
-
|
31
22
|
### 該当のソースコード
|
32
23
|
|
33
24
|
```
|
@@ -225,7 +216,7 @@
|
|
225
216
|
export default EditTodoForm;
|
226
217
|
|
227
218
|
```
|
228
|
-
```/frontend/app/app/todos/[id]/edit/
|
219
|
+
```/frontend/app/app/todos/[id]/edit/ぱげ.tsx
|
229
220
|
"use client"
|
230
221
|
|
231
222
|
import { useRouter } from 'next/router';
|
@@ -257,63 +248,40 @@
|
|
257
248
|
);
|
258
249
|
};
|
259
250
|
|
251
|
+
```/frontend/app/todos/[id]/edit/page.tsx
|
252
|
+
"use client";
|
253
|
+
|
254
|
+
import { useSearchParams } from 'next/navigation';
|
255
|
+
import Link from 'next/link';
|
256
|
+
import EditTodoForm from '@/components/EditTodoForm';
|
257
|
+
|
258
|
+
const EditTodoPage = () => {
|
259
|
+
// Use useSearchParams to retrieve the id from the URL
|
260
|
+
const searchParams = useSearchParams();
|
261
|
+
const id = searchParams.get('id');
|
262
|
+
|
263
|
+
// Display loading state until id is available
|
264
|
+
if (!id) {
|
265
|
+
return <div>Loading...</div>;
|
266
|
+
}
|
267
|
+
|
268
|
+
return (
|
269
|
+
<div className="flex justify-center items-center">
|
270
|
+
<div className="flex flex-col w-3/4 max-w-lg">
|
271
|
+
<EditTodoForm id={parseInt(id)} />
|
272
|
+
<Link
|
273
|
+
href="/"
|
274
|
+
className="ml-auto font-medium text-blue-600 hover:bg-blue-300 focus:outline-none"
|
275
|
+
>
|
276
|
+
Back
|
277
|
+
</Link>
|
278
|
+
</div>
|
279
|
+
</div>
|
280
|
+
);
|
281
|
+
};
|
282
|
+
|
260
283
|
export default EditTodoPage;
|
261
|
-
|
284
|
+
|
262
|
-
|
263
|
-
```/frontend/app/app/todos/[id]/edit/page.tsx
|
264
|
-
"use client";
|
265
|
-
|
266
|
-
import { useEffect, useState } from 'react';
|
267
|
-
import { useRouter } from 'next/navigation';
|
268
|
-
import useSWR from 'swr';
|
269
|
-
import Link from 'next/link';
|
270
|
-
import Todo from '@/components/Todo';
|
271
|
-
import { TodoType } from '@/types/Todo';
|
272
|
-
import axios from 'axios';
|
273
|
-
|
274
|
-
// Fetcher function for SWR
|
275
|
-
const fetcher = (url: string) => axios.get(url).then(res => res.data);
|
276
|
-
|
277
|
-
// Todo詳細ページを表示するコンポーネント
|
278
|
-
const TodoDetail = ({ params }: { params: { id: string } }) => {
|
279
|
-
// ルーティング情報を取得する
|
280
|
-
const router = useRouter();
|
281
|
-
const { id } = params;
|
282
|
-
|
283
|
-
// SWRを使ってデータを取得する
|
284
|
-
const { data: todo, error } = useSWR<TodoType>(id ? `http://localhost:3000/todos/${id}` : null, fetcher);
|
285
|
-
|
286
|
-
// エラーが発生した場合の処理
|
287
|
-
if (error) return <div>Failed to load</div>;
|
288
|
-
|
289
|
-
// Todoを取得中の場合は「Loading...」を表示する
|
290
|
-
if (!todo) return <div>Loading...</div>;
|
291
|
-
|
292
|
-
return (
|
293
|
-
<div className="flex justify-center items-center">
|
294
|
-
<div className="flex flex-col space-y-6 w-3/4 max-w-lg pt-10">
|
295
|
-
<label className="block text-xl font-bold text-gray-700">Todo</label>
|
296
|
-
<Todo todo={todo} />
|
297
|
-
<div className="flex justify-end">
|
298
|
-
<Link
|
299
|
-
href={`/todos/${id}/edit`}
|
300
|
-
className="mt-auto font-medium text-blue-600 hover:bg-blue-300 focus:outline-none mr-12"
|
301
|
-
>
|
302
|
-
Edit
|
303
|
-
</Link>
|
304
|
-
<Link
|
305
|
-
href="/"
|
306
|
-
className="mt-auto font-medium text-blue-600 hover:bg-blue-300 focus:outline-none"
|
307
|
-
>
|
308
|
-
Back
|
309
|
-
</Link>
|
310
|
-
</div>
|
311
|
-
</div>
|
312
|
-
</div>
|
313
|
-
);
|
314
|
-
};
|
315
|
-
|
316
|
-
export default TodoDetail;
|
317
285
|
|
318
286
|
```
|
319
287
|
|
1
修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
### 実現したいこと
|
2
2
|
|
3
3
|
マルチポストです。qiitaで一週間回答を求めたんですが....
|
4
|
-
|
4
|
+
答えにたどり着けず.....
|
5
5
|
|
6
6
|
解決したいこと
|
7
7
|
https://qiita.com/gabakugik/items/b0fcc09158d336e9e2a8
|