- Published on
Best food app - routing
Coś w routingu ogólnie i w next.js
Większość aplikacji webowych potrzebuje routingu, nie inaczej jest w przypadku best food app. Mamy stronę główną, listę restauracji, listę dań każdej z nich oraz koszyk z podsumowaniem. Od razu też warto zastanowić się, jak często treści na każdej z tych stron będą się zmieniać. Rozpiszmy to:
Strona główna, to typowa strona lądowania, tzw. 'landing page'. Treści praktycznie nie będą się zmieniać, ma być bardzo szybka i SEO jest bardzo ważne. Zastosujmy tutaj statyczną stronę (SSG, czyli static site generation).
adres: /
ścieżka: pages/index.js
import type { NextPage } from 'next'
const Home: NextPage = () => {
return (
<main>
<h1>HOME</h1>
</main>
)
}
export default Home
Lista restauracji będzie inna dla każdego z zapytań. Ma się pojawić szybko, a SEO nie jest istotne. Tutaj idealnie będzie użyć SWR
adres: /restaurants
ścieżka: pages/restaurants.js
export default function Restaurants() {
// TODO: useSWR
return (
<>
<h1>Restaurants:</h1>
{/* // TODO: Show restaurants */}
</>
)
}
W przypadku pojedynczej restauracji SEO jest bardzo ważne, dlatego zdecydowałem się na SSR (Server Side Rendering). Tutaj wykorzystam specjalną metodę wbudowaną w framework: getServerSideProps
.
adres: /restaurant/xyz
ścieżka: /restaurant/[restaurant].js
import { GetServerSideProps } from 'next'
const Restaurant = ({ data }: RestaurantProps) => {
return (
<>
<h1>Restaurant: data.name</h1>
{/* // TODO: Show rest restaurant details */}
</>
)
}
export const getServerSideProps: GetServerSideProps = async (ctx) => {
// TODO: Fetch data from external API
const restaurant = { name: 'xyz' };
// TODO: Pass data to the page via props
return { props: { data: { restaurant } } }
}
export default Restaurant
Szczegóły dania również wyrenderuję z pomocą SWR.
adres: /restaurant/[restaurant]/dish/[dish]
ścieżka: pages/restaurant/xy/dish/123.js
export default function Dish() {
// TODO: useSWR
return (
<>
<h1>Dish:</h1>
{/* // TODO: Show dish details */}
</>
)
}
Koszyk ma być szybki i SEO nie ma znaczenia, a więc ponownie SWR.
adres: /cart
ścieżka: pages/cart.js
export default function Cart() {
// TODO: useSWR
return (
<>
<h1>Cart:</h1>
{/* // TODO: Show cart details */}
</>
)
}
W następnym artykule dodamy SWR oraz podstawowe API z lokalnymi zamockowanymi danymi.