# 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 `` instead of `props.children`. ```diff import React from 'react'; + import { Outlet } from 'react-router-dom'; export default function Layout(props) { return (
- { props.children } +
); } ``` 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 (
- { React.cloneElement(props.children, { someProp: 'p1' }) } +
); } ``` 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 `` is changed to ``. ```diff - + ``` ### 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()` is changed to `useLocation`. ```diff - const location= useLocation(); + 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 - + ```