前置き
前回 と少し変えて質問してみた 同じ質問でも違うこと返答になるけど、質問の仕方で ChatoGPT の返答の質が上がりそうな気もする。
(ChatGPT の画面全体をうまくスクショで撮れなくて分割になってしまった)
ChatGPT に質問
reactjs を と react-router v6 利用した検索機能がある一覧表示のサンプルコードを教えてください
これを redux を利用したものに変更してください
続きを教えてください
最終的な reactjs + react-router v6 + redux を利用した App.js のコード
import React from "react"; import { BrowserRouter as Router, Routes, Route, Link, useParams, useNavigate } from "react-router-dom"; import { createStore } from "redux"; import { Provider, useDispatch, useSelector } from "react-redux"; const initialState = { data: [ { id: 1, name: "John", age: 25 }, { id: 2, name: "Jane", age: 30 }, { id: 3, name: "Bob", age: 40 }, { id: 4, name: "Alice", age: 22 } ], filter: "" }; const reducer = (state = initialState, action) => { switch (action.type) { case "SET_FILTER": return { ...state, filter: action.payload }; default: return state; } }; const store = createStore(reducer); const List = () => { const dispatch = useDispatch(); const navigate = useNavigate(); const { data, filter } = useSelector((state) => state); const handleFilterChange = (e) => { dispatch({ type: "SET_FILTER", payload: e.target.value }); }; const filteredData = data.filter((item) => item.name.toLowerCase().includes(filter.toLowerCase()) ); const handleItemClick = (id) => { navigate(`/details/${id}`); }; return ( <div> <input type="text" value={filter} onChange={handleFilterChange} /> <ul> {filteredData.map((item) => ( <li key={item.id} onClick={() => handleItemClick(item.id)}> {item.name}, {item.age} </li> ))} </ul> </div> ); }; const Details = () => { const { id } = useParams(); const { data } = useSelector((state) => state); const item = data.find((item) => item.id === parseInt(id)); return ( <div> <h2>{item.name}</h2> <p>Age: {item.age}</p> </div> ); }; const App = () => { return ( <Provider store={store}> <Router> <nav> <Link to="/">List</Link> </nav> <Routes> <Route path="/" element={<List />} /> <Route path="/details/:id" element={<Details />} /> </Routes> </Router> </Provider> ); }; export default App;
ブラウザで表示させる
このあたりの説明がなかった
$ npx create-react-app sample-search-app $ cd sample-search-app $ npm install react-router-dom react-redux redux $ npm run start