当前位置:   article > 正文

uniapp路由传参使用密文_面试官我想做个Reacter(React路由)

uniapp隐式传参

d78aa705156edf2dcfe8a7b023834f23.png
路由的基础用法回顾, 源码study,文章首发于 docs,求个star

依赖

路由依赖于 react-router ,但是一般 pc 路由使用 react-router-dom ,它依赖于 react-router

npm i react-router-dom -S

基本路由

  • Link 组件渲染路径,形式 a 标签
  • Route 组件渲染组件,匹配路由
  • HashRouter 是 hash 路由,BrowserRouter 是 history 路由
  • component 和 render 都可以渲染组件,component 优先级匹配高于 render;render 为一个函数,可以做逻辑渲染,给组件传递参数
  1. import { HashRouter, Route, Link } from 'react-router-dom'
  2. class App extends Component {
  3. ...
  4. render() {
  5. return (
  6. <div>
  7. <Link to="/" >首页</Link>
  8. <Link to="/page">Page</Link>
  9. {/* 配置路由规则 exact表示精确匹配,防止匹配其他页面的时候匹配到/,也就是首页*/}
  10. <Route path="/" exact component={Home}></Route>
  11. <Route path="/page" component={Page}></Route>
  12. <Route
  13. path={`/user/login`}
  14. render={routeProps => {
  15. return (
  16. <List name="这是render渲染" user="mondo" {...routeProps} />
  17. );
  18. }}
  19. ></Route>
  20. </div>
  21. );
  22. }
  23. }
  24. ReactDOM.render(
  25. <HashRouter>
  26. <App/>
  27. </HashRouter>,
  28. document.getElementById('root')
  29. )
  • Link 只配置路由,NavLink 可做导航路由,可配置activeClassNameactiveStyle
  1. import { NavLink as Link } from 'react-router-dom';
  2. class Nav extends Component {
  3. render () {
  4. return (
  5. <ul className="nav">
  6. <li className="list"><NavLink to="/archive" activeClassName='active'>归档</NavLink></li>
  7. <li className="list"><NavLink to="/about" activeClassName='active'>关于</NavLink></li>
  8. </ul>
  9. );
  10. };
  11. }
  12. export default Nav;

嵌套路由

在想要嵌套的组件里再次配置路由

  1. // User.js
  2. import React from 'react'
  3. import { Route, Link } from 'react-router-dom'
  4. const User = (props) => {
  5. // match 可以读取上层路由
  6. const { match } = props
  7. return (
  8. <div>
  9. <Link to={`${match.path}/login`}>登录</Link>
  10. <Link to="/user/reg">注册</Link>
  11. <Route path={`${match.path}/login`}>login</Route>
  12. <Route path="/user/reg">reg</Route>
  13. </div>
  14. )
  15. }
  16. export default User
  17. // App.js
  18. <Route path="/user" component={User}></Route>

路由传值

  • params 动态路由传参,通过组件内 props.match.params 访问
  1. // App.js
  2. <Link to="/list/1/4">列表</Link>
  3. {/* 必须使用 component 来指定组件,不然访问不到match */}
  4. <Route path="/list/:id/:user" component={List}/>
  5. // List.js
  6. const List = (props) => {
  7. console.log(props.match.params) // { id: 1, user: 4 }
  8. return (
  9. <h2>
  10. { props.name }{ props.children }
  11. </h2>
  12. )
  13. }
  • query 传值直接取 ? 后面的值,但是 router 没提供相应的方法,需要自己写一个函数来提取参数
  • 隐式传参,使用 to 传递对象 state

编程式路由

利用 props.history 来跳转路由

  1. // List.js
  2. const { history } = props
  3. const goRoute = () => {
  4. if (history) {
  5. history..push('/user')
  6. }
  7. }
  8. // 可以使用对象传值
  9. const goRoute = () => {
  10. if (history) {
  11. history..push({
  12. pathname: '/user',
  13. state: {
  14. id: 2
  15. }
  16. })
  17. }
  18. }

重定向

重定向使用 Switch 组件

  1. // ErrorPage.js
  2. import React from 'react'
  3. class Error extends React.Component{
  4. render(){
  5. return(
  6. <h1>页面404</h1>
  7. )
  8. }
  9. }
  10. export default Error
  11. // App.js
  12. import ErrorPage from './components/ErrorPage'
  13. class App extends React.Component {
  14. ...
  15. render() {
  16. ...
  17. {/* Switch表示如果匹配到了路由,就不再往下面匹配了,如果不写Switch,则一直会匹配到404页面 */}
  18. <Switch>
  19. {/* 配置路由规则 exact表示精确匹配,防止匹配其他页面的时候匹配到/,也就是首页*/}
  20. <Route path="/home" exact>Home</Route>
  21. <Route path="/page" component={Page}></Route>
  22. <Route path="/user" component={User}></Route>
  23. {/* 必须使用 component 来指定组件,不然访问不到match */}
  24. <Route path="/list/:id/:user" component={List}></Route>
  25. <Redirect from="/" to="/home" exact></Redirect>
  26. {/* 没有写path表示匹配到所有的路径 */}
  27. <Route component={ErrorPage} />
  28. </Switch>
  29. }
  30. }

withRouter

由于只有 Route 包裹的组件才可以访问到 props 内部的路由信息,可以引入 withRouter 高阶组件来使内部组件也可以访问路由信息

  1. import React from 'react'
  2. import { withRouter } from 'react-router-dom'
  3. const GoBack = props => {
  4. console.log(props)
  5. const goBack = () => {
  6. props.history.go(-1)
  7. }
  8. return <button onClick={goBack}>返回</button>
  9. }
  10. export default withRouter(GoBack)
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/636997
推荐阅读