微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

react-router-dom学习

目录

react-router-dom
主要由三个类别的组件

  • 路由器:,
  • 路由匹配器:,
  • 导航:,,
    也称导航组件为路由改变组件。

每个React Router应用程序的核心都应该是一个路由组件(Route)。
对于一个web应用而言,主要由两个路由组件,,两者的主要区别在于他们存储URL的方式以及于服务端通信的方式不同。

他是最常规的URL路径,需要配置于路由路径一直的服务端,在react中支持开箱即用。

无状态的路由。

将当前位置存储在URL的哈希部分,因此URL看起来像是:http://example.com/#/your/page
由于hash值永远不会被传递到后端服务,因此,不需要特殊的服务器配置。

路由匹配器

有两个路由匹配器,

当使用时,他会搜索它的子元素,以找到路径于当前URL相匹配的元素,然后渲染它,同时会忽略掉其他的,这是因为这个特性,所以要求要将更具体的路径(更长的)放在不太具体的路径之前。
如果没有找到对应的将会渲染null

注意:
将会始终匹配URL,因此,需要将放在的最后。另一种解决方案是使用精确的路径

<div>
    <Switch>
        <Route path="/about">
            <About />
        </Route>

        <Route path="/contact/:id">
            <Contact />
        </Route>

        <Route path="/contact">
            <AllContacts />
        </Route>

        <Route path="/">
            <Home />
        </Route>
    </Switch>
</div>


ReactDOM.render(
    <Router>
        <App />
    </Router>
)

导肮

组件用来在应用中创建一个链接,无论在何处使用组件,都见在HTML文档中创建一个锚点() ```jsx Home

//等同于

Home


## <NavLink>
<NavLink>是一个特殊的<Link>,当他的‘to’属性匹配到当前位置时,它可以将自身设置为 ‘active’ 状态。
```jsx
<NavLink to="/react" activeClassName="hurry">
    React
</NavLink>

//当URL时 /react 时,这个组件将会渲染:
<a href="/react" className="hurry">React</a>

//当URL时其他时,将会渲染:
<a href="/react">React</a>

在任何时候如果想使用强制导航,都可以使用,它将使用他的 ‘to’ 属性进行导航。

<Redirect to="/login" />

API

useHistory

这个钩子函数使您可以访问可用于当行的历史记录实例。

import { useHistory } from "react-router-dom";

function HomeButton() {
  let history = useHistory();

  function handleClick() {
    history.push("/home");
  }

  return (
    <button type="button" onClick={handleClick}>
      Go home
    </button>
  );
}

useLocation

返回表示当前URL的位置对象。类似于useState,它在URL改变时返回一个新的位置。

import React from "react";
import ReactDOM from "react-dom";
import {
  browserRouter as Router,
  Switch,
  useLocation
} from "react-router-dom";

function usePageViews() {
  let location = useLocation();
  React.useEffect(() => {
    ga.send(["pageview", location.pathname]);
  }, [location]);
}

function App() {
  usePageViews();
  return <Switch>...</Switch>;
}

ReactDOM.render(
  <Router>
    <App />
  </Router>,
  node
);

useParams

返回URL参数的键/值对对象,使用它来访问当前的match.params

import React from "react";
import ReactDOM from "react-dom";
import {
  browserRouter as Router,
  Switch,
  Route,
  useParams
} from "react-router-dom";

function BlogPost() {
  let { slug } = useParams();
  return <div>Now showing post {slug}</div>;
}

ReactDOM.render(
  <Router>
    <Switch>
      <Route exact path="/">
        <HomePage />
      </Route>
      <Route path="/blog/:slug">
        <BlogPost />
      </Route>
    </Switch>
  </Router>,
  node
);

useRouteMatch

钩子函数尝试以与相同的方式匹配当前URL。它对于在不实际渲染的情况下访问匹配数据非常有用。

import { Route } from "react-router-dom";

function BlogPost() {
  return (
    <Route
      path="/blog/:slug"
      render={({ match }) => {
        // Do whatever you want with the match...
        return <div />;
      }}
    />
  );
}

//可以使用以下代码替换
import { Route } from "react-router-dom";

function BlogPost() {
  return (
    <Route
      path="/blog/:slug"
      render={({ match }) => {
        // Do whatever you want with the match...
        return <div />;
      }}
    />
  );
}

//或者

import { Route } from "react-router-dom";

function BlogPost() {
  return (
    <Route
      path="/blog/:slug"
      render={({ match }) => {
        // Do whatever you want with the match...
        return <div />;
      }}
    />
  );
}

这是一个使用H5的history API(pushState,replaceState,popstate事件)来使得UI与URL保持同步。
该组件包含以下5个属性

  • basename: string
    有前导斜杠没有结尾斜杠。
  • getUserConfirmation: func
    确认导航,认使用window.confirm
  • forceRefresh: bool
    整个页面强制刷新。
  • keyLength: number
    location.key 的长度,认是6
  • children: node
    渲染的子元素
<browserRouter 
    basename="/calendar"
    getUserConfirmation={(message, callback) => {
        // this is the default behavior
        const allowTransition = window.confirm(message);
        callback(allowTransition);
    }}
    forceRefresh={true}
    keyLength={12}
>
    <Link to="/today"/> // renders <a href="/calendar/today">
    <Link to="/tomorrow"/> // renders <a href="/calendar/tomorrow">
    ...
</browserRouter>

  • basename: string
    有前导斜杠没有结尾斜杠。
  • getUserConfirmation: func
    确认导航,认使用window.confirm
  • hashType: string
    window.location.hash的字符编码类型,可选值:
    + slash (default)
    例如:#/ 和 #/sunshine/lollio
    + noslash
    例如:# 和 #sunshine/lollio
    + hashbang
    例如:#!/ 和 #!/sunshine/lollio
  • children: node

围绕应用程序提供声明性的可访问导航

  • to: string

  • to: object

    • pathname
    • search
    • hash
    • state
  • to: func

  • replace: bool
    如果为true,则在点击链接时,将会替换历史记录堆栈中的当前条目,而不是添加新的条目。

  • innerRef: func

  • innerRef: RefObject

  • components: React.Component
    如果想使用自己的导航组件,可以使用这个属性

  • others

  • className: string | func
  • activeClassName: string
  • style: object | func
    如果使用函数链接状态将作为参数传递。之后的版本中将会删除属性,使用函数样式代替内联样式。
        <NavLink
            to="/faq"
            style={isActive => ({
            color: isActive ? "green" : "blue"
            })}
        >
            FAQs
        </NavLink>
    
  • activeStyle: object
    active状态下显示属性的样式。
        <NavLink
            to="/faq"
            activeStyle={{
                fontWeight: "bold",
                color: "red"
        }}
        >
            FAQs
        </NavLink>
    
  • exact: bool
    如果为true,则仅当loaction完全匹配时,才会应用active的样式。
        <NavLink exact to="/faq">
            FAQs
        </NavLink>
    
  • strict: bool
        <NavLink strict to="/faq">
            FAQs
        </NavLink>
    
  • isActive: func
        <NavLink
            to="/events/123"
            isActive={(match, location) => {
                if (!match) {
                return false;
                }
                // only consider an event active if its event id is an odd number
                const eventID = parseInt(match.params.eventID);
                return !isNaN(eventID) && eventID % 2 === 1;
            }}
            >
            Event 123
        </NavLink>
    
  • location: object
    isActive比较当前历史位置(通常时当前浏览器URL)。要与不同的位置进行比较,可以传递一个位置
  • aria-current: string

  • to: string
  • to: object
  • push: bool
  • from: string
  • exact: bool
  • strict: bool
  • sensitive: bool

一个将URL的历史记录保存在内存中(不读取或写入地址栏)。在测试和非浏览器(如:React Native)环境中很有用.

  • initialEntries: array
  • initialIndex: number
  • getUserConfirmation: func
  • keyLength: number
  • children: node

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐