输入值以使用用户名或电子邮件在 GitHub 中搜索用户。对 GitHub API 端点执行 HTTP 请求,然后再次使用浏览器获取 API 获取用户的个人资料。请求 URL 将使用输入值。 .Tried Debounce 但没有用,下面是完整代码
import { useState } from "react";
import "./styles.css";
const API_URL = "https://api.github.com";
async function fetchResults(query) {
try {
const response = await fetch(`${API_URL}/search/users?q=${query}`);
const json = await response.json();
return json.items || [];
} catch (e) {
throw new Error(e);
}
}
export default function App() {
const [query, setQuery] = useState("");
const [results, setResults] = useState([]);
function onSearchChange(event) {
setQuery(event.target.value);
}
async function onSearchSubmit(event) {
event.preventDefault();
const results = await fetchResults(query);
setResults(results);
}
return (
<div className="app">
<main className="main">
<h2>GitHub User Search</h2>
<Form
onChange={onSearchChange}
onSubmit={onSearchSubmit}
value={query}
/>
<h3>Results</h3>
<div id="results">
<div>
{results.map((user) => (
<User
key={user.login}
avatar={user.avatar_url}
url={user.html_url}
username={user.login}
/>
))}
</div>
</div>
</main>
</div>
);
}
function User({ avatar, url, username }) {
return (
<div className="user">
<img src={avatar} alt="Profile" width="50" height="50" />
<a href={url} target="_blank" rel="noopener noreferrer">
{username}
</a>
</div>
);
}
function Form({ onSubmit, onChange, value }) {
return (
<form className="search-form" onSubmit={onSubmit}>
<input
id="search"
type="text"
// onkeyup="processChange()"
placeholder="Enter username or email"
onChange={onChange}
value={value}
/>
{/* <button type="submit" >Search</button> */}
<button onclick="processChange()">Click me</button>
</form>
);
}
function debounce(func, timeout = 300){
let timer;
return (...args) => {
clearTimeout(timer);
timer = setTimeout(() => { func.apply(this, args); }, timeout);
};
}
function saveInput(){
console.log('Saving data');
}
const processChange = debounce(() => saveInput());
我想要搜索功能,因为用户键入 github 电子邮件而不是必须先提交表单。