Skip to content

Commit 9e824da

Browse files
committed
feat: 集成router
1 parent 5e8a8cf commit 9e824da

File tree

4 files changed

+83
-0
lines changed

4 files changed

+83
-0
lines changed
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import { RouterProvider as Provider } from 'react-router';
2+
3+
import { router } from './router';
4+
import { RouterContext } from './router-context';
5+
6+
export const RouterProvider = () => {
7+
return (
8+
<RouterContext.Provider value={router}>
9+
<Provider router={router.reactRouter} />
10+
</RouterContext.Provider>
11+
);
12+
};

src/features/router/router-context.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import { createContext } from 'react';
2+
3+
import type { RouterContextType } from './router';
4+
5+
export const RouterContext = createContext<RouterContextType | null>(null);

src/features/router/router.ts

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
import type { RouterNavigateOptions, To } from 'react-router-dom';
2+
3+
import { router as reactRouter } from '@/router';
4+
5+
export function navigator() {
6+
function navigate(path: To | null, options?: RouterNavigateOptions) {
7+
reactRouter.navigate(path, options);
8+
}
9+
10+
function back() {
11+
reactRouter.navigate(-1);
12+
}
13+
14+
function forward() {
15+
reactRouter.navigate(1);
16+
}
17+
18+
function go(delta: number) {
19+
reactRouter.navigate(delta);
20+
}
21+
22+
function replace(path: To) {
23+
reactRouter.navigate(path, { replace: true });
24+
}
25+
26+
function reload() {
27+
reactRouter.navigate(0);
28+
}
29+
30+
function navigateUp() {
31+
reactRouter.navigate('..');
32+
}
33+
34+
function goHome() {
35+
reactRouter.navigate('/');
36+
}
37+
38+
return {
39+
back,
40+
forward,
41+
go,
42+
goHome,
43+
navigate,
44+
navigateUp,
45+
reactRouter,
46+
reload,
47+
replace
48+
};
49+
}
50+
51+
export const router = navigator();
52+
53+
export type RouterContextType = ReturnType<typeof navigator>;

src/features/router/useRoute.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import { useMatches } from 'react-router-dom';
2+
3+
/** - get route meta */
4+
export function useRoute<T = unknown>() {
5+
const matches = useMatches();
6+
7+
const route = matches.at(-1) as Router.Route<T>;
8+
9+
return {
10+
...route,
11+
matched: matches.slice(1) as Router.Route<T>[]
12+
};
13+
}

0 commit comments

Comments
 (0)