開発環境
- react v17.0.2
実装内容
ボタンにより、statusを更新し、その値に応じて以下のような2次元配列にfilterをかけたいと思っています。
import { useState } from "react"; const initialState = [ { name: "Tom", hobbies: [ { name: "baseball", status: 2 }, { name: "soccer", status: 1 } ] }, { name: "Bob", hobbies: [ { name: "soccer", status: 1 }, { name: "fishing", status: 2 } ] }, { name: "June", hobbies: [ { name: "soccer", status: 2 }, { name: "boxing", status: 2 } ] }, { name: "Taro", hobbies: [ { name: "kendo", status: 1 }, { name: "boxing", status: 2 } ] }, { name: "Jiro", hobbies: [{ name: "judo", status: 2 }] } ]; export default function App() { const [array, setArray] = useState(initialState); const [status, setStatus] = useState("__all__"); const filtered = array.filter((x) => { const _filtered = x.hobbies.filter((hobby) => { return status === "__alll__" || hobby.status === status; }); if (_filtered.length > 0) { x.hobbies = _filtered; return x; } return _filtered.length > 0; }); return ( <div className="App"> <button onClick={() => setStatus(1)}>status: 1</button> <button onClick={() => setStatus(2)}>status: 2</button> <button onClick={() => setStatus("__all__")}>status: all</button> </div> ); }
うまく動作していない部分
- 初回レンダリング時は、statusが「all」なので、全件表示したいが、filteredの値が空になっている
- ボタンを押す順番で結果が違う(初めにボタンで status = 1 にするときと、status = 2 にするときとではfilteredの値が異なる)
実現したいこと
statusの状態に応じて、常に同じ結果を得たい。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。