前提
Reactでjsonデータを取得し、名前でユーザーを検索できるシステムを作っています。
firstNameもしくはlastNameで検索をかけれるようにしたいと
思いましたが、現状のコードですと
大文字と小文字、そして文字列、全てが一致しないと検索できない状態なので
大文字小文字関係なく文字列が合っていれば
検索が働くようにしたいと思っています。
実現したいこと
検索窓にて大文字小文字関係なく文字列が合っていれば
検索機能が働くようにしたい
発生している問題・エラーメッセージ
大文字と小文字、そして文字列、全てが一致しないと検索できない
(例えばIngabergで検索すると検索結果が表示されるがingabergだと表示されない)
該当のソースコード
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 // console.log(data.search) 33 setSearchKeyword(data.search) 34 const result = allPosts.filter((output, index) => { 35 return output.firstName.includes(data.search)||output.lastName.includes(data.search); 36 }); 37 setPosts(result); 38 } 39 40 return ( 41 <div> 42 <div> 43 <form onSubmit={handleSubmit(getSearchResult)}> 44 <input placeholder="" className='' {...register('search', { required: true })} /> 45 <input className='btn btn-secondary' type="submit" value="Search" /> 46 </form> 47 </div> 48 <div> 49 {searchKeyword && 50 <p>{searchKeyword}で検索</p> 51 } 52 {posts ? 53 <> 54 {posts.map((data, i) => 55 <div key={i}> 56 <div className="flex"> 57 <div className="image"> 58 <img src={data.pic} className="profile" /> 59 </div> 60 <div> 61 <p className="name">{data.firstName} {data.lastName}</p> 62 <div className="info"> 63 <p>Email: {data.email}</p> 64 <p>Company: {data.company}</p> 65 <p>Skill: {data.skill}</p> 66 <p>Average Grade: {gradesAverage(data.grades)}%</p> 67 </div> 68 </div> 69 </div> 70 </div> 71 )} 72 </> 73 : 74 <div> 75 <p>Not Found!</p> 76 </div> 77 } 78 </div> 79 </div> 80 ); 81} 82export default Top;
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/08/08 06:00