- Properly locked the dependency on
react-router-dom
to version 6.3.0 (#4203)
- We've added a new type:
SerializeFrom
. This is used to infer the (#4013) JSON-serialized return type of loaders and actions. MetaFunction
type can now inferdata
andparentsData
types from route loaders (#4022)
- Improved performance for data serialization at runtime (#3889)
-
We've added type safety for load context.
AppLoadContext
is now an an interface mappingstring
tounknown
, allowing users to extend it via module augmentation: (#1876)declare module "@remix-run/server-runtime" { interface AppLoadContext { // add custom properties here! } }
No significant changes to this package were made in this release. See the releases page on GitHub for an overview of all changes in v1.6.7.
No significant changes to this package were made in this release. See the releases page on GitHub for an overview of all changes in v1.6.6.
-
We enhanced the type signatures of
loader
/action
anduseLoaderData
/useActionData
to make it possible to infer the data type from return type of its related server function.To enable this feature, you will need to use the
LoaderArgs
type from your Remix runtime package instead of typing the function directly:- import type { LoaderFunction } from "@remix-run/[runtime]"; + import type { LoaderArgs } from "@remix-run/[runtime]"; - export const loader: LoaderFunction = async (args) => { - return json<LoaderData>(data); - } + export async function loader(args: LoaderArgs) { + return json(data); + }
Then you can infer the loader data by using
typeof loader
as the type variable inuseLoaderData
:- let data = useLoaderData() as LoaderData; + let data = useLoaderData<typeof loader>();
The API above is exactly the same for your route
action
anduseActionData
via theActionArgs
type.With this change you no longer need to manually define a
LoaderData
type (huge time and typo saver!), and we serialize all values so thatuseLoaderData
can't return types that are impossible over the network, such asDate
objects or functions.