d76e8fb87f
* refactor: update umi version 3.x to version 4.x
* refactor: update react-router-dom version to 6.x
* refactor(react-router-dom): change Layout Component `props.children` to `<Outlet />`
* refactor(react-router-dom): change <Route /> props and <RouteSwitch /> correct
* refactor(react-router-dom): replace `<Redirect />` to `<Navigate replace />`
* refactor(react-router-dom): replace `useHistory` to `useNavigate`
* refactor(react-router-dom): replace `useRouteMatch` to `useParams`
* refactor(react-router-dom & dumi): fix <RouteSwitch /> & umi document bug
* refactor(react-router-dom): `useRoutes` Optimize `<RouteSwitch />` code
* refactor(react-router-dom): update `Route` types and docs
* refactor(react-router-dom): optimize RouteSwitch code
* refactor(react-router-dom): `useLocation` no generics type
* refactor(react-router-dom): add `less v3.9.0` to `resolutions` to solve the error of `gulp-less`
* refactor(react-router-dom): fix `<RouteSwitch />` `props.routes` as an array is not handled
* chore: upgrade `dumi` and refactor docs
* fix: completed code review, add `targets` to solve browser compatibility & removed `chainWebpack`
* refactor(dumi): upgraded dumi under `packages/core/client`
* refactor(dumi): delete `packages/core/dumi-theme-nocobase`
* refactor(dumi): degrade `react` & replace `dumi-theme-antd` to `dumi-theme-nocobase`
* refactor(dumi): solve conflicts between multiple dumi applications
* fix: login page error in react 17
* refactor(dumi): remove less resolutions
* refactor(dumi): umi add `msfu: true` config
* fix: merge bug
* fix: self code review
* fix: code reivew and test bug
* refactor: upgrade react to 18
* refactor: degrade react types to 17
* chore: fix ci error
* fix: support routerBase & fix workflow page params
* fix(doc): menu externel link
* fix: build error
* fix: delete
* fix: vitest error
* fix: react-router new code replace
* fix: vitest markdown error
* fix: title is none when refresh
* fix: merge error
* fix: sidebar width is wrong
* fix: useProps error
* fix: side-menu-width
* fix: menu selectId is wrong & useProps is string
* fix: menu selected first default & side menu hide when change
* fix: test error & v0.10 change log
* fix: new compnent doc modify
* fix: set umi `fastRefresh=false`
* refactor: application v2
* fix: improve code
* fix: bug
* fix: page = 0 error
* fix: workflow navigate error
* feat: plugin manager
* fix: afterAdd
* feat: update docs
* feat: update docs
* fix: page tab change not work
* fix: login redirect query param doesn't work
* fix: bug and doc
* feat: update docs
* fix: ci error
* fix: merge main
* feat: update docs
* feat: update docs
* feat: update docs
* chore(versions): 😊 publish v0.10.0-alpha.1
* fix: translations
* chore: backend node test max old space size
* docs: add useSearchParams
---------
Co-authored-by: chenos <chenlinxh@gmail.com>
Co-authored-by: ChengLei Shao <chareice@live.com>
157 lines
2.9 KiB
Markdown
157 lines
2.9 KiB
Markdown
# v0.10:update instructions
|
||
|
||
v0.10 has made major upgrades to dependencies, including `react`, `react-dom`, `react-router`, `umi`, and `dumi`.
|
||
|
||
## 依赖升级
|
||
|
||
- Upgrade `react@^17`, `react-dom@^17` to `react@^18`, `react-dom@^18` version
|
||
|
||
```diff
|
||
{
|
||
"devDependencies": {
|
||
+ "react": "^18",
|
||
+ "react-dom": "^18",
|
||
- "react": "^17",
|
||
- "react-dom": "^17",
|
||
}
|
||
}
|
||
```
|
||
|
||
- Upgrade `react-router@5` to `react-router@6`
|
||
|
||
```diff
|
||
{
|
||
"devDependencies": {
|
||
+ "react-router-dom": "^6.11.2",
|
||
- "react-router-dom": "^5",
|
||
}
|
||
}
|
||
```
|
||
|
||
## `react-router` change description
|
||
|
||
because the upgrade of `react-router` requires some code changes.
|
||
|
||
### Layout Component
|
||
|
||
Layout component needs to use `<Outlet />` instead of `props.children`.
|
||
|
||
```diff
|
||
import React from 'react';
|
||
+ import { Outlet } from 'react-router-dom';
|
||
|
||
export default function Layout(props) {
|
||
return (
|
||
<div>
|
||
- { props.children }
|
||
+ <Outlet />
|
||
</div>
|
||
);
|
||
}
|
||
```
|
||
|
||
if you use `React.cloneElement` to render the route component, you need to change it like this:
|
||
|
||
```diff
|
||
import React from 'react';
|
||
+ import { Outlet } from 'react-router-dom';
|
||
|
||
export default function RouteComponent(props) {
|
||
return (
|
||
<div>
|
||
- { React.cloneElement(props.children, { someProp: 'p1' }) }
|
||
+ <Outlet context={{ someProp: 'p1' }} />
|
||
</div>
|
||
);
|
||
}
|
||
```
|
||
|
||
Change the route component to get the value from `useOutletContext`
|
||
|
||
```diff
|
||
import React from 'react';
|
||
+ import { useOutletContext } from 'react-router-dom';
|
||
|
||
- export function Comp(props){
|
||
+ export function Comp() {
|
||
+ const props = useOutletContext();
|
||
return props.someProp;
|
||
}
|
||
```
|
||
|
||
### Redirect
|
||
|
||
`<Redirect>` is changed to `<Navigate replace />`.
|
||
|
||
```diff
|
||
- <Redirect to="about" />
|
||
+ <Navigate to="about" replace />
|
||
```
|
||
|
||
### useHistory
|
||
|
||
`useNavigate` is changed to `useHistory`.
|
||
|
||
```diff
|
||
- import { useHistory } from 'react-router-dom';
|
||
+ import { useNavigate} from 'react-router-dom';
|
||
|
||
- const history = useHistory();
|
||
+ const navigate = useNavigate();
|
||
|
||
- history.push('/about')
|
||
+ navigate('/about')
|
||
|
||
- history.replace('/about')
|
||
+ navigate('/about', { replace: true })
|
||
```
|
||
|
||
### useLocation
|
||
|
||
`useLocation<type>()` is changed to `useLocation`.
|
||
|
||
```diff
|
||
- const location= useLocation<type>();
|
||
+ const location= useLocation();
|
||
```
|
||
|
||
`const { query } = useLocation()` is changed to `useSearchParams()`。
|
||
|
||
```diff
|
||
- const location = useLocation();
|
||
- const query = location.query;
|
||
- const name = query.name;
|
||
+ const [searchParams, setSearchParams] = useSearchParams();
|
||
+ searchParams.get('name');
|
||
```
|
||
|
||
### path
|
||
|
||
All of the following are valid route paths in v6:
|
||
|
||
```
|
||
/groups
|
||
/groups/admin
|
||
/users/:id
|
||
/users/:id/messages
|
||
/files/*
|
||
/files/:id/*
|
||
```
|
||
|
||
The following RegExp-style route paths are not valid in v6:
|
||
|
||
```
|
||
/tweets/:id(\d+)
|
||
/files/*/cat.jpg
|
||
/files-*
|
||
```
|
||
|
||
For more changes and api changes, please refer to [react-router@6](https://reactrouter.com/en/main/upgrading/v5)。
|
||
|
||
## Docs Demo
|
||
|
||
```diff
|
||
- <code src="./demo.tsx" />
|
||
+ <code src="demo.tsx"></code>
|
||
```
|