Перевод статьи был подготовлен до начала курса.
Последние несколько месяцев я работал над приложением, использующим NextJS. С каждой неделей его становится все больше и больше.
Приложение использует аксиомы для вызовов API и не указано-следующее для государственного управления.
Вызовов API много, но мы не хотим, чтобы пользователи видели кучу экранов загрузки.
Поэтому мы сохраняем результаты звонков аксиомы В неуказанный хранилища.
Однако мы столкнулись с проблемой.
Само хранение становится все более сложным.
Иногда страницам требуется несколько вызовов API, а они, в свою очередь, зависят от результатов других вызовов API. Дни превращались в недели, а недели в месяцы, а наши неустановленные складские помещения становились все более громоздкими.
У нас возникали странные ошибки, поскольку наша самодельная логика кэширования с трудом справлялась с неожиданными пограничными случаями.
Тогда мы подумали, что должен быть более простой путь.
И вот он.
И это даже спроектировано Версель , создатель СледующийJS .
Давайте познакомимся с КСВ
Название SWR происходит от устаревший при повторной проверке , метод кэширования, который сейчас набирает популярность во фронтенд-разработке.Он позволяет немедленно загружать кэшированный контент и немедленно обновлять его для обработки нового контента в будущем.
В нашем случае мы получили идеальный компромисс между производительностью и пользовательским опытом.
Как использовать SWR
использовать SWR — это библиотека перехватчиков React, разработанная Версель .Он позволяет получать данные из API или другого внешнего источника, сохранять их в кеше, а затем отображать.
Начнем с рассмотрения примера компонента React, который получает список TODO с JSON-серверы , и визуализирует его.
Теперь давайте посмотрим на тот же компонент, но переписанный с использованием использовать SWR .import React from "react"; import ".
/App.css"; const todosEndpoint = " http://localhost:3001/todos "; const TodoApp = () => { const [todos, setTodos] = React.useState([]); React.useEffect(() => { const getData = async () => { const response = await fetch(todosEndpoint); const data = await response.json(); setTodos(data); }; getData(); }, []); return ( <div className="App"> {todos.map((todo) => ( <div key={todo.id}>{todo.title}</div> ))} </div> ); }; export default TodoApp;
import React from "react";
import useSWR from "swr";
const todosEndpoint = " http://localhost:3001/todos ";
const getData = async () => {
const response = await fetch(todosEndpoint);
return await response.json();
};
const TodoApp = () => {
const { data: todos } = useSWR(todosEndpoint, getData);
return (
<div>
{todos && todos.map(todo => (
<div key={todo.id}>{todo.title}</div>
)}
</div>
);
};
export default TodoApp;
Как видите, она очень похожа на предыдущую реализацию.
В этом примере мы используем useSWR(ключ, сборщик, параметры) чтобы получить наш список TODO. Ключ useSWR необходим для кэширования.
В нашем случае мы использовали todosEndpoint .
Как сборщик мы передали асинхронную функцию, которая извлекает список TODO. Необходимо отметить, что использовать SWR понятия не имеет, как вы получаете данные.
Вы можете использовать любую стратегию асинхронного получения данных, которая вам нравится.
вы можете использовать принести , аксиомы или даже ГрафQL .
Хотя ваша функция возвращает данные асинхронно, использовать SWR будет рад. Вызов использовать SWR возвращает следующие параметры: данные : ключевые данные, полученные с помощью сборщик (неопределено, если еще не загружено); ошибка : ошибка, вызванная сборщик ; isValidating : логическая переменная, указывающая, выполняется ли запрос или повторная проверка; mutate (данные?, должноRevalidate) : Функция для изменения кэшированных данных.
Более сложный пример
Давайте рассмотрим более сложный пример, в котором используется больше возвращаемых параметров.использовать SWR .
В этом примере мы получим один элемент списка TODO и отобразим флажок для статуса.
полный наша задача из списка.
Когда флажок установлен, мы отправляем запрос PUT для обновления TODO, а затем вызываем мутировать обновить кеш использовать SWR .
import React from "react";
import useSWR from "swr";
import ".
/App.css"; const todosEndpoint = " http://localhost:3001/todos "; const getTodo = async (id) => { const response = await fetch(`${todosEndpoint}/${id}`); return await response.json(); }; const updateTodo = async (id, todo) => { const response = await fetch(`${todosEndpoint}/${id}`, { method: "PUT", headers: { "Content-type": "application/json; charset=UTF-8", }, body: JSON.stringify(todo), }); return await response.json(); }; const TodoApp = () => { const todoId = 1; const key = `${todosEndpoint}/${todoId}`; const { data: todo, mutate } = useSWR(key, () => getTodo(todoId) ); const toggleCompleted = async () => { const newTodo = { .
todo,
completed: !todo.completed,
};
await updateTodo(todoId, newTodo);
mutate(newTodo);
};
if (!todo) {
return <div>Loading.</div>;
}
return (
<div>
<p>{todo.title}</p>
<div>
<input
type="checkbox"
id="completed"
name="completed"
value="completed"
checked={todo.completed}
onChange={toggleCompleted}
/>
<label htmlFor="completed">Completed</label>
</div>
</div>
);
};
Применение мутировать это отличный способ улучшить видимую производительность вашего веб-приложения.
Мы можем изменять данные локально и изменять представление, не дожидаясь обновления удаленного источника данных.
использовать SWR Он даже проверит и заменит их новейшими справочными данными.
Зачем мне для этого нужна библиотека?
Возможно, вам интересно это.Возможно, в вашем приложении уже есть механизм управления состоянием, и вы не видите смысла использовать стороннюю библиотеку для таких простых задач, как поиск и кэширование данных.
И я вам скажу, что кэшировать данные – дело непростое.
И по мере роста вашего приложения это становится еще сложнее.
Вы столкнетесь с пограничными случаями, и их обработка приведет к созданию сложных магазинов и поставщиков, которые трудно понять и сложно поддерживать.
Ошибки появятся из ниоткуда.
«В информатике есть только две сложные проблемы: аннулирование кэша и присвоение имен».Вместо реализации собственного решения для извлечения данных, почему бы не положиться на проверенное решение, разработанное одной из самых уважаемых компаний в экосистеме React?— Фил Карлтон
Как нам помогло useSWR
Переносим проблему получения данных из нашего приложения в использовать SWR дало много преимуществ.1. Это позволило нам удалить код Запросы на включение, которые удаляют лишний код, а не добавляют новый, — мои любимые.
Чем меньше кода в приложении, тем меньше вероятность появления ошибок.
И это хорошо.
С возрастом я все больше начинаю ценить простоту.
использовать SWR позволило нам полностью удалить неуказанные магазины, что упростило наше приложение и облегчило его понимание.
2. Новым разработчикам стало проще присоединиться к проекту.
использовать SWR , как и большинство проектов с открытым исходным кодом, может похвастаться отличной документацией.
Внедрение нашего собственного решения означало бы, что нам нужно будет написать собственную документацию и научить новых разработчиков проекта тому, как обращаться с извлечением данных.
Теперь, когда мы используем использовать SWR , нам не нужно этого делать.
3. Он упрощал сложные вещи.
Наше приложение, как и большинство других приложений, содержит множество вызовов API. Некоторые из этих вызовов зависят от других вызовов API. С использовать SWR Легко писать перехватчики для зависимых запросов.
4. Улучшена видимая производительность.
Приложение выглядит быстрее.
Пользователи это оценили и оставили хорошие отзывы.
5. Он обновляет устаревшие данные использовать SWR обновляет устаревшие данные в фокусе.
Это означает, что пользователи всегда имеют самую актуальную версию данных, независимо от времени загрузки.
Заключение
использовать SWR оказали большое влияние на наше приложение.Эта библиотека упростила наш код и улучшила взаимодействие с пользователем.
Я даже не могу представить другую библиотеку, которую было бы так легко реализовать и которая приносила бы столько преимуществ.
использовать SWR .
Чтобы узнать больше о использовать SWR , вы можете посетить Веб-сайт или репозиторий на GitHub .
Альтернативные библиотеки
использовать SWR — не единственная хорошая библиотека для извлечения данных.Хотя в нашем случае это сработало хорошо, возможно, вам лучше подойдет другая библиотека извлечения данных.
React-запрос
ответный запрос — это библиотека, состоящая из перехватчиков для получения, кэширования и обновления асинхронных данных в React. Это популярное решение, написанное Таннер Линси , очень похож по объему на использовать SWR .
Аполлон
Клиент Аполлон - это клиент ГрафQL , который позаботится о получении и кэшировании ваших данных, а также об обновлении пользовательского интерфейса.Если вы используете ГрафQL , Что Аполлон было бы отличным решением.
Теги: #программирование #JavaScript #react.js #react #programming #разработка программного обеспечения #Front End Development
-
10 Лучших Мест Для Знакомств
19 Oct, 24 -
Дайджест: Технологии Дпи И Оборудование Сорм
19 Oct, 24 -
Мини-Беспроводная Клавиатура Rii
19 Oct, 24 -
Как Попасть В Spring Logger
19 Oct, 24