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

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

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

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

TypeScript

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

React.js

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

Q&A

解決済

1回答

407閲覧

idを元に都道府県名をfilter関数を使って表示させたい

aren3

総合スコア9

Next.js

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

TypeScript

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

React.js

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

0グッド

0クリップ

投稿2022/01/03 07:02

(src/hooks/usePostPrefecturteSelect.tsx) import { supabase } from 'src/libs/supabase'; export const getPrefectures = async () => { const { data, error } = await supabase.from('prefectures').select('id, prefectures_name'); if (error) { alert(error); } return data; };
(src/pages/admins/spots/post/index.tsx) const fetchPrefecturesListName = useCallback(async () => { const data: string[] | null = await getPrefectures(); setPrefecturesName(data || []); // console.log(data); }, [setPrefecturesName]); useEffect(() => { fetchPrefecturesListName(); }, [user, fetchPrefecturesListName]); useEffect(() => { setSession(supabase.auth.session()); supabase.auth.onAuthStateChange((_event: string, session: Session | null) => { setSession(session); }); }, []); const handleSpotPost = useCallback(async () => { const { data, error } = await supabase.from('spots').insert({ name: name, title: title, admin_id: user?.id, appeal: appeal, area: area, link: link, target_person: targetPerson, usage_fee: usageFee, term: term, postal_code: postal_code, address: address, manager: manager, tel: tel, email: email, prefecture_id: prefecture_id, }); console.log({ data, error }); toast.success('スポットを登録しました', {}); // 都道府県名の絞り込み const prefecturesFilter = prefectures_name.filter((prefectures) => { return prefectures.id === prefecture_id; }); }, [ name, title, appeal, area, link, targetPerson, usageFee, term, postal_code, address, manager, tel, email, prefecture_id, ]);
(src/pages/admins/spots/post/index.tsx) <div className='mb-5'> <label htmlFor='prefectures_name'>都道府県名</label>       {prefectures_name.length == 0 ? null : ( <select value={prefectures_name} onChange={(e) => { setPrefectureId(e.target.value); console.log(e.target.value); }} className='w-full p-2 rounded-l-md placeholder-gray-500' > {prefectures_name.map((value) => ( <option key={value} value={value['id']}> // ログで都道府県IDが取得できているのは確認済み {console.log(value['id'])}                            // ログで都道府県名が取得できているのは確認済み {value['prefectures_name']} {console.log(value['prefectures_name'])} </option> ))} </select> )} </div> {/* {console.log(prefectures_name)}                                 

状況

Next.js(Typescript)とSupabaseで開発しており、ボタンのhandleSpotPostをクリックし、supabaseのinsertが走り、セレクトボックス項目をクリックすると該当の都道府県のIDがデータに入るところは処理ができています。

解決したいこと

しかし、セレクトボックスの最初が「北海道」となっていますが、クリックして47都道府県の候補が縦に並び、「秋田県」などを選択したときはUI上は「北海道」に選択が戻ってしまします。セレクトボックスの箇所かfilter関数の箇所の記述に誤りがあると思いますが、問題点がありましたらご教授願いたいです!

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

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

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

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

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

guest

回答1

0

ベストアンサー

selectタグのvalueがprefectures_nameっとなっていますが、これを選択されたIDにすれば上手く動くかもしれません。

投稿2022/01/03 13:37

JJ_1123_I

総合スコア29

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

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

aren3

2022/01/03 14:08

ありがとうございます! 意図した挙動になりました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問