Ваш код будет очень похож на Реагировать-маршрутизатор галерея пример .
1004 * Вам просто нужно получить данные в список вашего компонента и сделать карты. В демонстрации ниже я использовал Bulma для стиля и
React-masonry-css для создания сетки Masonry.
Демо можно найти здесь .
Важной частью демонстрации является компонент Cards
со следующим кодом:
const Cards = () => {
const [users, setUsers] = useState([]);
const [isFetching, setFetchStatus] = useState(true);
useEffect(() => {
const fetchUsers = async () => {
try {
const { data } = await axios.get(API_URL);
setUsers(data);
} catch (err) {
console.error("failed", err);
}
setFetchStatus(false);
};
fetchUsers();
}, []);
const location = useLocation();
const background = location.state && location.state.background;
return isFetching ? (
"loading..."
) : (
<Fragment>
<Switch location={background || location}>
<Route path="/" component={() => <Home users={users} />} />
</Switch>
{background && (
<Route
path="/user/:id"
component={() => <RouterModal users={users} />}
/>
)}
</Fragment>
);
};
Это похоже на пример галереи, за исключением useEffect
, который выбирает данные из https://jsonplaceholder.typicode.com/ API.
useEffect
перехват с пустым массивом в качестве параметра в компоненте класса основан на методе жизненного цикла componentDidMount
- поэтому он просто вызывается при первом рендеринге.
Вещи, которые вы могли бы улучшить в своем окончательном приложении:
- Проверка кэширования извлеченных данных
- Ограничение отображаемых карт (например, показать только 1000 карт и фильтрпо буквам)
- Добавить поле поиска с помощью typeahead
- Изменить запрос на slug (в демоверсии это идентификатор, потому что в поддельных данных API нет слага)
- Moveкомпоненты в разные файлы (хранятся все в одном файле только для демонстрации)