+6
-289
README.md
+6
-289
README.md
···
1
-
Welcome to your new TanStack app!
2
-
3
-
# Getting Started
4
-
5
-
To run this application:
6
-
7
-
```bash
8
-
npm install
9
-
npm run start
10
-
```
11
-
12
-
# Building For Production
13
-
14
-
To build this application for production:
15
-
16
-
```bash
17
-
npm run build
18
-
```
19
-
20
-
## Testing
21
-
22
-
This project uses [Vitest](https://vitest.dev/) for testing. You can run the tests with:
23
-
24
-
```bash
25
-
npm run test
26
-
```
27
-
28
-
## Styling
29
-
30
-
This project uses CSS for styling.
31
-
32
-
33
-
34
-
35
-
## Routing
36
-
This project uses [TanStack Router](https://tanstack.com/router). The initial setup is a file based router. Which means that the routes are managed as files in `src/routes`.
37
-
38
-
### Adding A Route
39
-
40
-
To add a new route to your application just add another a new file in the `./src/routes` directory.
41
-
42
-
TanStack will automatically generate the content of the route file for you.
43
-
44
-
Now that you have two routes you can use a `Link` component to navigate between them.
45
-
46
-
### Adding Links
47
-
48
-
To use SPA (Single Page Application) navigation you will need to import the `Link` component from `@tanstack/react-router`.
49
-
50
-
```tsx
51
-
import { Link } from "@tanstack/react-router";
52
-
```
53
-
54
-
Then anywhere in your JSX you can use it like so:
55
-
56
-
```tsx
57
-
<Link to="/about">About</Link>
58
-
```
59
-
60
-
This will create a link that will navigate to the `/about` route.
61
-
62
-
More information on the `Link` component can be found in the [Link documentation](https://tanstack.com/router/v1/docs/framework/react/api/router/linkComponent).
63
-
64
-
### Using A Layout
65
-
66
-
In the File Based Routing setup the layout is located in `src/routes/__root.tsx`. Anything you add to the root route will appear in all the routes. The route content will appear in the JSX where you use the `<Outlet />` component.
67
-
68
-
Here is an example layout that includes a header:
69
-
70
-
```tsx
71
-
import { Outlet, createRootRoute } from '@tanstack/react-router'
72
-
import { TanStackRouterDevtools } from '@tanstack/react-router-devtools'
73
-
74
-
import { Link } from "@tanstack/react-router";
75
-
76
-
export const Route = createRootRoute({
77
-
component: () => (
78
-
<>
79
-
<header>
80
-
<nav>
81
-
<Link to="/">Home</Link>
82
-
<Link to="/about">About</Link>
83
-
</nav>
84
-
</header>
85
-
<Outlet />
86
-
<TanStackRouterDevtools />
87
-
</>
88
-
),
89
-
})
90
-
```
91
-
92
-
The `<TanStackRouterDevtools />` component is not required so you can remove it if you don't want it in your layout.
93
-
94
-
More information on layouts can be found in the [Layouts documentation](https://tanstack.com/router/latest/docs/framework/react/guide/routing-concepts#layouts).
95
-
96
-
97
-
## Data Fetching
98
-
99
-
There are multiple ways to fetch data in your application. You can use TanStack Query to fetch data from a server. But you can also use the `loader` functionality built into TanStack Router to load the data for a route before it's rendered.
100
-
101
-
For example:
102
-
103
-
```tsx
104
-
const peopleRoute = createRoute({
105
-
getParentRoute: () => rootRoute,
106
-
path: "/people",
107
-
loader: async () => {
108
-
const response = await fetch("https://swapi.dev/api/people");
109
-
return response.json() as Promise<{
110
-
results: {
111
-
name: string;
112
-
}[];
113
-
}>;
114
-
},
115
-
component: () => {
116
-
const data = peopleRoute.useLoaderData();
117
-
return (
118
-
<ul>
119
-
{data.results.map((person) => (
120
-
<li key={person.name}>{person.name}</li>
121
-
))}
122
-
</ul>
123
-
);
124
-
},
125
-
});
126
-
```
127
128
-
Loaders simplify your data fetching logic dramatically. Check out more information in the [Loader documentation](https://tanstack.com/router/latest/docs/framework/react/guide/data-loading#loader-parameters).
129
-
130
-
### React-Query
131
-
132
-
React-Query is an excellent addition or alternative to route loading and integrating it into you application is a breeze.
133
-
134
-
First add your dependencies:
135
-
136
-
```bash
137
-
npm install @tanstack/react-query @tanstack/react-query-devtools
138
-
```
139
-
140
-
Next we'll need to create a query client and provider. We recommend putting those in `main.tsx`.
141
-
142
-
```tsx
143
-
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
144
-
145
-
// ...
146
-
147
-
const queryClient = new QueryClient();
148
-
149
-
// ...
150
-
151
-
if (!rootElement.innerHTML) {
152
-
const root = ReactDOM.createRoot(rootElement);
153
-
154
-
root.render(
155
-
<QueryClientProvider client={queryClient}>
156
-
<RouterProvider router={router} />
157
-
</QueryClientProvider>
158
-
);
159
-
}
160
-
```
161
-
162
-
You can also add TanStack Query Devtools to the root route (optional).
163
-
164
-
```tsx
165
-
import { ReactQueryDevtools } from "@tanstack/react-query-devtools";
166
-
167
-
const rootRoute = createRootRoute({
168
-
component: () => (
169
-
<>
170
-
<Outlet />
171
-
<ReactQueryDevtools buttonPosition="top-right" />
172
-
<TanStackRouterDevtools />
173
-
</>
174
-
),
175
-
});
176
-
```
177
-
178
-
Now you can use `useQuery` to fetch your data.
179
-
180
-
```tsx
181
-
import { useQuery } from "@tanstack/react-query";
182
-
183
-
import "./App.css";
184
-
185
-
function App() {
186
-
const { data } = useQuery({
187
-
queryKey: ["people"],
188
-
queryFn: () =>
189
-
fetch("https://swapi.dev/api/people")
190
-
.then((res) => res.json())
191
-
.then((data) => data.results as { name: string }[]),
192
-
initialData: [],
193
-
});
194
-
195
-
return (
196
-
<div>
197
-
<ul>
198
-
{data.map((person) => (
199
-
<li key={person.name}>{person.name}</li>
200
-
))}
201
-
</ul>
202
-
</div>
203
-
);
204
-
}
205
-
206
-
export default App;
207
-
```
208
-
209
-
You can find out everything you need to know on how to use React-Query in the [React-Query documentation](https://tanstack.com/query/latest/docs/framework/react/overview).
210
-
211
-
## State Management
212
-
213
-
Another common requirement for React applications is state management. There are many options for state management in React. TanStack Store provides a great starting point for your project.
214
-
215
-
First you need to add TanStack Store as a dependency:
216
-
217
-
```bash
218
-
npm install @tanstack/store
219
-
```
220
-
221
-
Now let's create a simple counter in the `src/App.tsx` file as a demonstration.
222
-
223
-
```tsx
224
-
import { useStore } from "@tanstack/react-store";
225
-
import { Store } from "@tanstack/store";
226
-
import "./App.css";
227
-
228
-
const countStore = new Store(0);
229
-
230
-
function App() {
231
-
const count = useStore(countStore);
232
-
return (
233
-
<div>
234
-
<button onClick={() => countStore.setState((n) => n + 1)}>
235
-
Increment - {count}
236
-
</button>
237
-
</div>
238
-
);
239
-
}
240
-
241
-
export default App;
242
-
```
243
-
244
-
One of the many nice features of TanStack Store is the ability to derive state from other state. That derived state will update when the base state updates.
245
-
246
-
Let's check this out by doubling the count using derived state.
247
-
248
-
```tsx
249
-
import { useStore } from "@tanstack/react-store";
250
-
import { Store, Derived } from "@tanstack/store";
251
-
import "./App.css";
252
-
253
-
const countStore = new Store(0);
254
-
255
-
const doubledStore = new Derived({
256
-
fn: () => countStore.state * 2,
257
-
deps: [countStore],
258
-
});
259
-
doubledStore.mount();
260
-
261
-
function App() {
262
-
const count = useStore(countStore);
263
-
const doubledCount = useStore(doubledStore);
264
-
265
-
return (
266
-
<div>
267
-
<button onClick={() => countStore.setState((n) => n + 1)}>
268
-
Increment - {count}
269
-
</button>
270
-
<div>Doubled - {doubledCount}</div>
271
-
</div>
272
-
);
273
-
}
274
-
275
-
export default App;
276
-
```
277
-
278
-
We use the `Derived` class to create a new store that is derived from another store. The `Derived` class has a `mount` method that will start the derived store updating.
279
-
280
-
Once we've created the derived store we can use it in the `App` component just like we would any other store using the `useStore` hook.
281
-
282
-
You can find out everything you need to know on how to use TanStack Store in the [TanStack Store documentation](https://tanstack.com/store/latest).
283
-
284
-
# Demo files
285
-
286
-
Files prefixed with `demo` can be safely deleted. They are there to provide a starting point for you to play around with the features you've installed.
287
-
288
-
# Learn More
289
-
290
-
You can learn more about all of the offerings from TanStack in the [TanStack documentation](https://tanstack.com).
···
1
+
# Statusphere ESAV Live
2
+
its statussphere
3
+
using ESAV Live
4
+
its a websocket connection to get a live query running with ESAV
5
6
+
- [ESAV on Tangled](https://tangled.sh/@whey.party/esav)
7
+
- [Test instance](https://statusphere.whey.party) (uses [esav.whey.party](https://esav.whey.party))