これは私の反応コンポーネント内のコードです
const mockFetch = () => Promise.resolve({
json: () => new Promise((resolve) => setTimeout(() => resolve({
student1: {
studentName: 'student1'
},
student2: {
studentName: 'student2'
},
student3: {
studentName: 'student3'
}
}), 250))
})
function MyApp() {
const [result, setResult] = React.useState([]);
const [queryString, setQueryString] = React.useState("");
function searchHandler() {
mockFetch(
"{url that i defined in real code}"
)
.then(response => response.json())
.then(data => {
Object.keys(data).filter(element => {
if (queryString === "") {
setResult(result.push(data[element].studentName));
} else if (data[element].studentName.toLowerCase().includes(queryString.toLowerCase())) {
setResult(result.push(data[element].studentName));
}
setResult(result.join("<br/>"));
})
});
}
return (
<div>
<div>
<input type = "text" placeholder = "Search..."
onChange={event => setQueryString(event.target.value)} />
<button onClick={searchHandler}>Search</button>
</div>
<output>
Result:
<br /><br />{result}<br /><br /><br /> <br />
Query String:
<br /><br />{queryString}<br /><br />
</output>
</div>
);
}
ReactDOM.render(<MyApp />, document.querySelector('#root'))
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.8.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.8.3/umd/react-dom.production.min.js"></script>
<div id="root"></div>
2回目のクリックでstudentNameによってAPI応答から学生を検索(フィルタリング)しようとすると、result.push()タイプエラーで壊れます。
私が達成したい動作:
- ボタンをクリックすると、
searchAPIデータをフィルタリングしたいstudentName - が空の場合
queryString、すべてのアイテムをフィルタリングせずに表示したい <br/>タグを挟んで結果を表示したい