Data fetching is not a special case in front-end applications. It's the core of our work. In Remastered, we've got you covered.
tl;dr — a magical experience which is driven by the loader
function and the useRouteData
hook.
loader
functionEach Route can expose a loader
function, which is essentially a server-side function that will be automatically loaded once the route is visited. It gets loaded on SSR so you get progressive enhancement for free, and it gets loaded semi-synchronously when navigating in an already-hydrated application.
The loader
function provides the data in the back-end, and the useRouteData
can be used to consume the loader data.
import { LoaderFn, useRouteData } from "remastered";
export const loader: LoaderFn<string> = async () => {
return `Page was rendered at ${new Date()}`;
};
export default function MyPage() {
const renderedAt = useRouteData<string>();
return <div>{renderedAt}</div>;
}
Notice how easy it is to load the data. You visit the page, and synchronously get the values! No more React.useEffect
or 3rd party packages that do magic. It's all baked into the framework.
When navigating across routes, Remastered will understand what data is missing, and will refetch just the missing data.
If we have the following routes:
path | loader |
---|---|
/ |
no loader |
/users.tsx |
loads the list of users |
/users/@userId.tsx |
loads the information of a specific user |
Then:
/users/1
to /users/2
will only fetch the loader of /users/@userId.tsx
/
to /users
will only fetch the loader of /users.tsx
/
to /users/2
will fetch both /users.tsx
and /users/@userId.tsx
loadersWhen navigating across routes, and then going "back" and "forward" in the browser, no data will be refetched. Users can simply go back/forward to see old data, just like old (and wonderful) server-side rendered applications. When the users will refresh, they will be served with fresh data again!
This page was generated with Remastered v0.1.34 at
Wanna talk? Feel free to tweet at @galstar.