Q&A
前提
Reactでjsonデータを取得し、名前でユーザーを検索できるシステムを作っています。
firstNameもしくはlastNameで検索をかけれるようにしたいと
思いましたが実装中に以下のエラーメッセージが発生しました。
実現したいこと
- jsonにあるユーザーのデータでfirstNameもしくはlastNameでユーザーを検索できるようにしたい
発生している問題・エラーメッセージ
'lastName' is not defined no-undef
とでて、複数条件の検索ができないでいます。
該当のソースコード
React.js
1import React, {useState, useEffect} from 'react'; 2import axios from 'axios'; 3import { useForm } from "react-hook-form"; 4 5const Top = () => { 6 const [ posts, setPosts] = useState([]); 7 const [ allPosts, setAllPosts] = useState([]); 8 const { register, handleSubmit } = useForm(); 9 10 // Gradeの平均スコアを出す関数 11 const gradesAverage = (grades) => { 12 let sum = 0; 13 grades.forEach(function(score) { 14 sum += Number(score); 15 }); 16 let ave = sum / grades.length 17 return ave; 18 }; 19 20 // ユーザーの入力キーワードをState化する 21 const [searchKeyword, setSearchKeyword] = React.useState(""); 22 23 useEffect(() => { 24 axios.get('https://api.hatchways.io/assessment/students') 25 .then(result => { 26 setPosts(result.data.students); 27 setAllPosts(result.data.students); 28 }) 29 }, []); 30 31 const getSearchResult = (data) => { 32 setSearchKeyword(data.search) 33 const result = allPosts.filter((output, index) => { 34 console.log(output) 35 return output.firstName||lastName.includes(data.search); 36 }); 37 console.log(result) 38 setPosts(result); 39 } 40 41 return ( 42 <div> 43 <div> 44 <form onSubmit={handleSubmit(getSearchResult)}> 45 <input placeholder="" className='' {...register('search', { required: true })} /> 46 <input className='btn btn-secondary' type="submit" value="Search" /> 47 </form> 48 </div> 49 <div> 50 {searchKeyword && 51 <p>{searchKeyword}で検索</p> 52 } 53 {posts ? 54 <> 55 {posts.map((data, i) => 56 <div key={i}> 57 <div className="flex"> 58 <div className="image"> 59 <img src={data.pic} className="profile" /> 60 </div> 61 <div> 62 <p className="name">{data.firstName} {data.lastName}</p> 63 <div className="info"> 64 <p>Email: {data.email}</p> 65 <p>Company: {data.company}</p> 66 <p>Skill: {data.skill}</p> 67 <p>Average Grade: {gradesAverage(data.grades)}%</p> 68 </div> 69 </div> 70 </div> 71 </div> 72 )} 73 </> 74 : 75 <div> 76 <p>Not Found!</p> 77 </div> 78 } 79 </div> 80 </div> 81 ); 82} 83export default Top;
回答1件
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
2022/08/08 03:55