Files
solid-trpc/README.MD
T
2022-12-16 07:17:49 +02:00

97 lines
2.3 KiB
Markdown

# Solid tRPC - v10
## Getting Started
I recommend using [Create JD App](https://github.com/OrJDev/create-jd-app) but if you want to create a project from scratch, you can follow the steps below:
### Installation
```bash
npm install @trpc/client @trpc/server solid-trpc@next @tanstack/solid-query
```
### Creating A Client
```ts
// utils/trpc.ts
import { IAppRouter } from "@/whereMyRouterAt"; // your router type
import { createTRPCSolid } from "solid-trpc";
import { httpBatchLink } from "@trpc/client";
import { QueryClient } from "@tanstack/solid-query";
export const trpc = createTRPCSolid<IAppRouter>();
export const client = trpc.createClient({
links: [
httpBatchLink({
url: "/api/trpc",
}),
],
});
export const queryClient = new QueryClient();
```
### TRPC Provider
```tsx
// entry-client.tsx
import { mount, StartClient } from "solid-start/entry-client";
import { client, queryClient, trpc } from "./utils/trpc";
mount(
() => (
<trpc.Provider client={client} queryClient={queryClient}>
<StartClient />
</trpc.Provider>
),
document
);
```
### Example
```tsx
// routes/example.tsx
import { trpc } from "./utils/trpc";
import { createSignal } from "solid-js";
const [name, setName] = createSignal("");
const res = trpc.queryName.useQuery(() => ({ name: name() })); // this will be called onMount and when name changes
export default function Exaple() {
return (
{...}
)
```
### Reactivity
## Input
Solid tRPC input is considered to be a Solid accessor, meaning that you are required to pass a callback and SQ will rerun the tRPC endpoint whenever the signal changes.
```ts
const [name, setName] = createSignal("John");
trpc.example.hello.useQuery(name); // ✅
trpc.example.hello.useQuery(name()); // ❌
trpc.example.useQuery(()=> name().slice(1)); // ✅
// or even
trpc.example.useQuery(()=> "John"); // ✅ will be called once
```
## Enabled Property
If you are using the `enabled` property make sure you follow Solid Query rules:
```ts
const [enabled, setEnabled] = createSignal(false);
const query = trpc.queryName.useQuery(() => "hey there", {
// ❌ passing a signal directly is not reactive
// enabled: enabled(),
// ✅ passing a function that returns a signal is reactive
get enabled() {
return enabled();
},
});
```