@@ -20,15 +20,17 @@ npm i effector effector-react react
20
20
21
21
## Usage
22
22
23
- ### ` RouterProvider ` - provides router instance
23
+ ### Component API
24
+
25
+ #### ` RouterProvider ` - provides router instance
24
26
25
27
Wrap your app into this:
26
28
27
29
``` tsx
28
- import { createHistoryRouter } from ' atomic-router'
29
- import { RouterProvider , Route } from ' atomic-router-react'
30
+ import { createHistoryRouter } from " atomic-router" ;
31
+ import { RouterProvider , Route } from " atomic-router-react" ;
30
32
31
- import { HomePage } from ' ./routes'
33
+ import { HomePage } from " ./routes" ;
32
34
33
35
const router = createHistoryRouter ({ routes });
34
36
@@ -41,15 +43,15 @@ const App = () => {
41
43
};
42
44
```
43
45
44
- ### ` Link ` - render a link
46
+ #### ` Link ` - render a link
45
47
46
48
Simple usage:
47
49
48
50
``` tsx
49
51
import { createRoute } from ' atomic-router'
50
52
import { Link } from ' atomic-router-react'
51
53
52
- const homeRoute = createRoute <{postId : string }> ()
54
+ const homeRoute = createRoute ()
53
55
const postRoute = createRoute <{postId: string }>()
54
56
55
57
<Link to = { homeRoute } >Route link</Link >
@@ -60,23 +62,102 @@ const postRoute = createRoute<{postId:string}>()
60
62
All params:
61
63
62
64
``` tsx
63
- import { Link } from ' atomic-router-react'
65
+ import { Link } from " atomic-router-react" ;
64
66
65
67
<Link
66
68
to = { route }
67
- params = { { foo: ' bar' }}
68
- query = { { bar: ' baz' }}
69
+ params = { { foo: " bar" }}
70
+ query = { { bar: " baz" }}
69
71
activeClassName = " font-semibold text-red-400"
70
72
inactiveClassName = " opacity-80"
71
- />
73
+ />;
74
+ ```
75
+
76
+ #### ` Route ` - render route
77
+
78
+ ``` tsx
79
+ import { Route } from " atomic-router-react" ;
80
+
81
+ <Route route = { homeRoute } view = { HomePage } />;
82
+ ```
83
+
84
+ ### Declarative API
85
+
86
+
87
+
88
+ #### ` createRouteView ` - render view if route is opened
89
+
90
+ ``` tsx
91
+ import { createRoute } from " atomic-router" ;
92
+ import { createRouteView } from " atomic-router-react" ;
93
+ import { restore , createEffect } from " effector" ;
94
+
95
+ const homeRoute = createRoute ();
96
+
97
+ const getPostsFx = createEffect (/* ... */ );
98
+
99
+ const $posts = restore (getPostsFx , []);
100
+
101
+ const postsLoadedRoute = chainRoute ({
102
+ route ,
103
+ beforeOpen: getPostsFx ,
104
+ });
105
+
106
+ const PostsList = createRouteView ({
107
+ route: postsLoadedRoute ,
108
+ view : () => {
109
+ const posts = useStore ($posts );
110
+
111
+ return ; /* ... */
112
+ },
113
+ otherwise : () => {
114
+ return <div >Loading...</div >;
115
+ },
116
+ });
117
+ ```
118
+
119
+ You can also set only a part of ` createRouteView ` config on create and pass the rest of it via props.
120
+
121
+ #### ` createRoutesView ` - render routes
122
+
123
+ ``` tsx
124
+ import { createRouteView , RouterProvider } from " atomic-router-react" ;
125
+
126
+ // { route: RouteInstance<...>, view: FC<...> }
127
+ import * as Home from " @/pages/home" ;
128
+ import * as Post from " @/pages/post" ;
129
+
130
+ import { router } from " @/app/routing" ;
131
+
132
+ const RoutesView = createRoutesView ({
133
+ routes: [
134
+ { route: Home .route , view: Home .Page },
135
+ { route: Post .route , view: Post .Page },
136
+ ],
137
+ otherwise : () => {
138
+ return <div >Page not found!</div >;
139
+ },
140
+ });
141
+
142
+ const App = () => {
143
+ return (
144
+ <RouterProvider router = { router } >
145
+ <RoutesView />
146
+ </RouterProvider >
147
+ );
148
+ };
72
149
```
73
150
74
- ### ` Route ` - render route
151
+ Like in ` createRouteView ` , you can set only a part of ` createRoutesView ` config on create and pass the rest of it via props:
75
152
76
153
``` tsx
77
- import { Route } from ' atomic-router-react'
154
+ // Set specific otherwise view
155
+ const RoutesView = createRoutesView ({
156
+ otherwise: SpecificNotFound ,
157
+ });
78
158
79
- <Route route = { homeRoute } view = { HomePage } />
159
+ // Pass the routes as a prop
160
+ <RoutesView routes = { routes } />;
80
161
```
81
162
82
163
### ` useLink ` — resolve path from route
0 commit comments