Open washogo opened 2 months ago
【実装できた項目】
【実装できなかった項目】
【未実装】
※【編集画面の表示について】 相違ありませんので、後ほど実装していきます。
@y-u27
3・4は親コンポーネントにidをpropsとして設定後、子コンポーネントであるTodoArticleの引数にidを渡したのですが、編集画面遷移後のURLにはundefinedが含まれていました。TodoArticleのコードにはエラーは出ていなかったです
こちらについて、page.tsxでは以下2つのpropsを受け取ることができる仕様です。それ以外は受け取ることができないと考えていただいて大丈夫です。
そのため、src/app/todos/[id]/page.tsxについて、以下のようにpropsを設定していますが、
import { Article } from "@/app/types/types";
import TodoArticle from "@/components/TodoArticle";
const pageId = ({ id }: Article) => {
return (
<>
<TodoArticle id={id} />
</>
);
};
export default pageId;
id
ではなく、以下src/app/todos/[id]/edit/page.tsxのようにparams
を使うようにしてください!
import TodoEdit from "@/components/TodoEdit";
const editPage = ({ params }: { params: { id: number } }) => {
return (
<TodoEdit id={params.id} />
)
};
export default editPage;
参考:https://nextjs.org/docs/app/api-reference/file-conventions/page
やりたいこと
レビュー
1. 一覧画面のtodoをクリックする
src/app/todos/page.tsxについて、以下のように
params
でid
を受け取るようにしていますが、一覧画面でパスは/todos
となり、id
は含まれないので取得できないですね。それにより、URLのid
部分がundefined
となっていたのだと思います。各todoの詳細画面のURLについて、
id
は各todoが持っているので、それをURLに含める必要があります。 そのためには、src/components/TodoList.tsxの以下の箇所でdata.id
をLinkコンポーネントのhref
に含めると良さそうですね。具体的な実装イメージは以下のような感じです!
2. 詳細画面に遷移する
1の修正により詳細画面に遷移することができるようになると思います。
3. 編集ボタンをクリックする
src/app/todos/[id]/page.tsxでTodoArticleコンポーネントに
id
を渡す必要がありますが、現実装では渡されていないので、編集ボタンにあるLinkコンポーネントのhref
に使うid
の取得ができずにudefined
となっていますね。 そのため、src/app/todos/[id]/page.tsxについて、propsでid
を受け取るようにしてください!また、TodoArticleコンポーネントは以下のように
TodoData
型のpropsを受け取るようになっていますが、id
だけで良いかと思います!4. 編集画面に遷移する
3の修正により編集画面に遷移することができるようになると思います。
5. 編集して更新ボタンをクリックする
1~4までの対応により編集画面で想定通りに編集することができるようになるかと思います。
編集のリクエストについて
これはidは数値出ることが期待されますが、現実相では
undefined
となってしまっているために発生しているエラーだと思いますね。 そのため、1~4までの対応により解消されるかと思います。編集画面の表示について
これは編集画面の各種入力欄を現在の値が入力された状態にしたいということですかね? 認識相違なければ、この場合はtodoをグローバルな状態として管理すると良さそうです! 具体的にはLocal StorageやRecoilやReactのContext APIを使って、編集画面に遷移する前に対象のtodoの情報を保存して、それを編集画面で利用するという実装となります。