#javascript #next.js #fetch
#javascript #next.js #выборка
Вопрос:
Я учусь Next.js и хотите показывать данные в зависимости от запроса, который вводит пользователь. Я хочу использовать функции Next, но я не уверен, что useSWR — это правильный способ справиться с этим, потому что я не смог найти никаких примеров того, что я пытаюсь сделать.
Мой код выглядит так:
export default function SearchBar() {
const [query, setQuery] = useState("");
const [address, setAddress] = useState("");
const fetcher = async (url) => await axios.get(url).then((res) => res.data);
const { data, error } = useSWR(address, fetcher);
const handleSubmit = (e) => {
setAddress(`https://jsonplaceholder.typicode.com/todos/${query}`);
e.preventDefault();
};
if (error) return <div>ERROR</div>;
return (
<>
<Form onSubmit={handleSubmit}>
<Input
type="text"
onChange={(e) => setQuery(e.target.value)}
value={query}
/>
<SearchButton type="submit">Search</SearchButton>
</Form>
</>
);
}
Правильно ли это использование useSWR или я должен просто использовать обычную выборку с useEffect?
Ответ №1:
Лично я рекомендую использовать useSWR
так, как это рекомендовано Next.js разработчики; useEffect — это чистый реактивный хук.
Логика useSWR очень проста, не нужно писать много кода. Кроме того, у вас есть много параметров опций, revalidateOnRender
которые будут очень полезны при разработке.
Пример из документов:
function Profile() {
const { data, error } = useSWR('/api/user')
if (error) return <div>failed to load</div>
if (!data) return <div>loading...</div>
return <div>hello {data.name}!</div>
}