您好,欢迎来到二三娱乐。
搜索
您的当前位置:首页react -- web react-router 和 com

react -- web react-router 和 com

来源:二三娱乐

百度直接搜react路由的资料比较少,建议直接上github,头部就是docs链接了

文档虽然是英文的,但是很清楚,就算用谷歌直接翻译都很清晰(因为主要是代码,没啥文字)

路由

安装完脚手架,在*App.js*稍作修改

引入路由
import {
  BrowserRouter as Router,
  Route,
  Link
} from 'react-router-dom'
修改<App />
 <Router>
    <div>
      <h2>这是react-router渲染出来的</h2>
      <Route path="/:id" component={Child}/>
    </div>
  </Router>

可以看出来,router竟然是组件格式,很棒的设计。

添加页面

Child

const Child = ({ match }) => (
  <div>
    <h3>ID: {match.params.id}</h3>
  </div>
)

组件component 竟然是函数

ok,看效果

效果

关于路由的精确定位问题
比如 我要访问 / 但是如果直接写

<Route path="/" component={Home} />

访问 / 的时候是没有问题的,但是访问二级(以及更高)的路由,会发现,多了Home的渲染。比如访问 My

image.png

home页面也出来了,这时候给 / 添加 exact 就可以了

<Route exact path="/" component={Home} />
页面导入

Code

import React from 'react'
var title = 'Home Page'
export default class Repos extends  {
    render() {
        return (
            <div>
                <h1>{title}</h1>
            </div>
        )
    }
}

大概这个格式,引入

import Home from './home'

然后就给component了

<Route exact path="/" component={Home} />

NavLink 转跳

一般都是用 Link,使用方法一样,引入就可以用了

不过NavLink更灵活(顾名思义,在Nav中使用),就介绍它

先引入

import { NavLink } from 'react-router-dom'

然后使用,Code

import { NavLink } from 'react-router-dom'

var activeNavStyle = {
    color: 'red'
}

var FootComponent = React.createClass({
  render: function() {
    return (
        <div>
            <NavLink to="/" exact activeStyle={activeNavStyle}>首页</NavLink>
            <NavLink to="/my" activeStyle={activeNavStyle}>我的</NavLink>
        </div>
    )
  }
})

activeStyle 是处于当前路由的时候展示的样式,还有一个Api是 activeClassName

这里用了 exact 是为了精确匹配当前的位置

除了exact 还有strict 他是在精确匹配,并且后面还有 / 的时候才被执行

还有一个isActive的API,当路由被激活的时候,会执行这个函数

isActive = { (match, location)={console.log('劳资被激活了')} }

<br />


组件

创建组件

var component = React.createClass({
  render: function() {
    return <h1>come on!</h1>
  }
})

使用

不需要像vue 或者 angular 一样需要在声明,只要在同一个作用域下(同一个js文件下),直接导入

<!-- 后面记得加标签结束标记 / -->
<component />
创建Js组件

NavLink 为例子(下面的二大金刚)

import React, { Component } from 'react'
import {
  BrowserRouter as Router,
  Route
} from 'react-router-dom'
import { NavLink } from 'react-router-dom'

var activeNavStyle = {
    color: 'red'
}

class Foot extends Component {
  render() {
    return (
        <div>
            <NavLink to="/" exact activeStyle={activeNavStyle}>首页</NavLink>
            <NavLink to="/my" activeStyle={activeNavStyle}>我的</NavLink>
        </div>
    )
  }
}

export default Foot;

导入
import Foot from './components/foot'

效果(修改了下样式,可能跟上面的代码不大一样)

image.png image.png

Tips: JSX里面 class的写法是 calssName

<div className="foot"></div>

注释的话是

{/**/}

OK ,好了。

--end--

Copyright © 2019- yule263.com 版权所有 湘ICP备2023023988号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务