実現したいこと
以下の設定で、”開く”リンクをクリックすると一覧全ての子の情報が開いてしまいますが、どの様に変更すれば、クリックした親に対する個別の子の情報だけを開く様になるかお教え頂けませんでしょうか?
前提
以下の様なreactjsを使用した記述で顧客関連情報を表示する一覧があります。以下のlevel1とlevel2は親子関係にあり”開く”リンクをクリックするとその子である情報が表示される設定にしたいと考えております。
発生している問題・エラーメッセージ
以下の設定で、”開く”リンクをクリックすると一覧全ての子の情報が開いてしまいます。
該当のソースコード
import axios from "axios" import { useEffect, useState } from "react"; import './css/List.css'; export default function List() { const [users, setUsers] = useState([]); useEffect(() => { getUsers(); }, []); function getUsers() { axios.get('https://xxxxxx/api/users/').then(function(response) { console.log(response.data); setUsers(response.data); }); } const [isOpen, setIsOpen] = useState(true); return ( <div className="List"> {Object.values(users).map((user, key) => <div className="level1"> {user.level == 1 && <p>{user.name}</p> } <font onClick={() => setIsOpen(!isOpen)}> {isOpen ? "開く" : "閉じる"} </font> </div> {user.level == 2 && !isOpen && <p>{user.address}</p> <p>{user.email}</p> <p>{user.profession}</p> } )} </div> ) }
試したこと
loop内のonClick処理から値を渡そうと試しました。
補足情報(FW/ツールのバージョンなど)
axios@1.3.1
react-dom@18.2.0
react-scripts@5.0.1
react@18.2.0
isOpen を配列か何かにするとか…。
user.levelってどのような値で、どう変化するのでしょうか?
どのような値
→ 1or2 の数値? 配列?
どう変化する
→ isOpenと同じような動き??
→ 開くと数字が2に変わるとか
できればuserのオブジェクトを見せていただきたいです。よろしくお願いします。
説明不足で申し訳ございません。dbのテーブル内で親であればlevelは1、子であれば2です。levelは1か2だけです。数値であり変化は致しません。
ということは、「レベル1のname(font)をクリックしたら、レベル2のデータを表示する」ということを実現したい、という認識であっていますか?
uky様、
混乱させてしまい大変恐縮でございます。開くというリンクがlevel1の下に配置されてあり、クリックするとlevel2のデータを表示させたいです。ただ上記の顧客情報の(name,address,email,proffession)というDB構造は混乱させていますので、忘れて頂き(申し訳ございません。)、通常の親子関係にある、(コメント、返信)などの関係の複数の親がある中でその個別の子のデータを表示するという設定を想定して頂きたく存じます。

回答1件
あなたの回答
tips
プレビュー