美文网首页
react - router example 2

react - router example 2

作者: penelope_2bad | 来源:发表于2020-08-04 21:56 被阅读0次

    1.Custom Link

    import React from "react";
    import {
      BrowserRouter as Router,
      Switch,
      Route,
      Link,
      useRouteMatch,
    } from "react-router-dom";
    
    // This example show how you could create a custom
    // <Link> that renders something special when the URL
    // is the same as the one the <Link> points to.
    
    export default function CustomLinkExample() {
      return (
        <Router>
          <div>
            <OldSchoolMenuLink activeOnlyWhenExact={true} to="/" label="Home" />
            <OldSchoolMenuLink to="/about" label="About" />
    
            <hr />
    
            <Switch>
              <Route exact path="/">
                <Home />
              </Route>
              <Route path="/about">
                <About />
              </Route>
            </Switch>
          </div>
        </Router>
      );
    }
    
    function OldSchoolMenuLink(props) {
      const { label, to, activeOnlyWhenExact } = props;
    
      let match = useRouteMatch({
        path: to,
        exact: activeOnlyWhenExact,
      });
    Ï
      return (
        <div className={match ? "active" : ""}>
          {match && "> "}
          <Link to={to}>{label}</Link>
        </div>
      );
    }
    
    function Home() {
      return (
        <div>
          <h2>Home</h2>
        </div>
      );
    }
    
    function About() {
      return (
        <div>
          <h2>About</h2>
        </div>
      );
    }
    
    

    2.Preventing Transitions

    import React, { useState } from "react";
    import {
      BrowserRouter as Router,
      Switch,
      Route,
      Link,
      Prompt,
    } from "react-router-dom";
    
    // Sometimes you want to prevent the user from
    // navigating away from a page. The most common
    // use case is when they have entered some data
    // into a form but haven't submitted it yet, and
    // you don't want them to lose it.
    
    export default function PreventingTransitionsExample() {
      return (
        <Router>
          <ul>
            <li>
              <Link to="/">Form</Link>
            </li>
            <li>
              <Link to="/one">One</Link>
            </li>
            <li>
              <Link to="/two">Two</Link>
            </li>
          </ul>
    
          <Switch>
            <Route path="/" exact children={<BlockingForm />} />
            <Route path="/one" children={<h3>One</h3>} />
            <Route path="/two" children={<h3>Two</h3>} />
          </Switch>
        </Router>
      );
    }
    
    function BlockingForm() {
      let [isBlocking, setIsBlocking] = useState(false);
    
      return (
        <form
          onSubmit={(event) => {
            event.preventDefault();
            event.target.reset();
            setIsBlocking(false);
          }}
        >
          <Prompt
            when={isBlocking}
            message={(location) =>
              `Are you sure you want to go to ${location.pathname}`
            }
          />
    
          <p>
            Blocking? {isBlocking ? "Yes, click a link or the back button" : "Nope"}
          </p>
    
          <p>
            <input
              size="50"
              placeholder="type something to block transitions"
              onChange={(event) => {
                setIsBlocking(event.target.value.length > 0);
              }}
            />
          </p>
    
          <p>
            <button>Submit to stop blocking</button>
          </p>
        </form>
      );
    }
    
    

    3.No Match

    import React from "react";
    import {
      BrowserRouter as Router,
      Route,
      Link,
      Switch,
      Redirect,
      useLocation,
    } from "react-router-dom";
    
    // You can use the last <Route> in a <Switch> as a kind of
    // "fallback" route, to catch 404 errors.
    //
    // There are a few useful things to note about this example:
    //
    // - A <Switch> renders the first child <Route> that matches
    // - A <Redirect> may be used to redirect old URLs to new ones
    // - A <Route path="*> always matches
    
    export default function NoMatchExample() {
      return (
        <Router>
          <div>
            <ul>
              <li>
                <Link to="/">Home</Link>
              </li>
              <li>
                <Link to="/old-match">Old Match, to be redirected</Link>
              </li>
              <li>
                <Link to="/will-match">Will Match</Link>
              </li>
              <li>
                <Link to="/will-not-match">Will Not Match</Link>
              </li>
              <li>
                <Link to="/also/will/not/match">Also Will Not Match</Link>
              </li>
            </ul>
    
            <Switch>
              <Route exact path="/">
                <Home />
              </Route>
              <Route path="/old-match">
                <Redirect to="/will-match" />
              </Route>
              <Route path="/will-match">
                <WillMatch />
              </Route>
              <Route path="*">
                <NoMatch />
              </Route>
            </Switch>
          </div>
        </Router>
      );
    }
    
    function Home() {
      return <h3>Home</h3>;
    }
    
    function WillMatch() {
      return <h3>Matched!</h3>;
    }
    
    function NoMatch() {
      let location = useLocation();
    
      return (
        <div>
          <h3>
            No match for <code>{location.pathname}</code>
          </h3>
        </div>
      );
    }
    
    

    4.Recursive Paths

    1. 注意数组的find方法
    import React from "react";
    import {
      BrowserRouter as Router,
      Switch,
      Route,
      Link,
      Redirect,
      useParams,
      useRouteMatch,
    } from "react-router-dom";
    
    // Sometimes you don't know all the possible routes
    // for your application up front; for example, when
    // building a file-system browsing UI or determining
    // URLs dynamically based on data. In these situations,
    // it helps to have a dynamic router that is able
    // to generate routes as needed at runtime.
    //
    // This example lets you drill down into a friends
    // list recursively, viewing each user's friend list
    // along the way. As you drill down, notice each segment
    // being added to the URL. You can copy/paste this link
    // to someone else and they will see the same UI.
    //
    // Then click the back button and watch the last
    // segment of the URL disappear along with the last
    // friend list.
    
    export default function RecursiveExample() {
      return (
        <Router>
          <Switch>
            <Route path="/:id">
              <Person />
            </Route>
            <Route path="/">
              <Redirect to="/0" />
            </Route>
          </Switch>
        </Router>
      );
    }
    
    function Person() {
      let { url } = useRouteMatch();
      let { id } = useParams();
      let person = find(parseInt(id));
    
      return (
        <div>
          <h3>{person.name}’s Friends</h3>
    
          <ul>
            {person.friends.map((id) => (
              <li key={id}>
                <Link to={`${url}/${id}`}>{find(id).name}</Link>
              </li>
            ))}
          </ul>
    
          <Switch>
            <Route path={`${url}/:id`}>
              <Person />
            </Route>
          </Switch>
        </div>
      );
    }
    
    const PEEPS = [
      { id: 0, name: "Michelle", friends: [1, 2, 3] },
      { id: 1, name: "Sean", friends: [0, 3] },
      { id: 2, name: "Kim", friends: [0, 1, 3] },
      { id: 3, name: "David", friends: [1, 2] },
    ];
    
    function find(id) {
      return PEEPS.find((p) => p.id === id);
    }
    
    

    相关文章

      网友评论

          本文标题:react - router example 2

          本文链接:https://www.haomeiwen.com/subject/csfgrktx.html