美文网首页
react route example-1

react route example-1

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

    1. Basic

       <Route exact path="/">
           <Home />
        </Route>Ï
    

    2.URL Parameters

    <Switch>
        <Route path="/:id" children={<Child />} />
    </Switch>
    
    function Child() {
      // We can use the `useParams` hook here to access
      // the dynamic pieces of the URL.
      let { id } = useParams();
    
      return (
        <div>
          <h3>ID: {id}</h3>
        </div>
      );
    }
    

    3.Nesting
    The path let us build <Route> paths that are relative to the parent route, while the url lets us build relative links

    image.png
    function Topics() {
      // The `path` lets us build <Route> paths that are
      // relative to the parent route, while the `url` lets
      // us build relative links.
      let { path, url } = useRouteMatch();
    
      return (
        <div>
          <h2>Topics</h2>
          <ul>
            <li>
              <Link to={`${url}/rendering`}>Rendering with React</Link>
            </li>
            <li>
              <Link to={`${url}/components`}>Components</Link>
            </li>
            <li>
              <Link to={`${url}/props-v-state`}>Props v. State</Link>
            </li>
          </ul>
    
          <Switch>
            <Route exact path={path}>
              <h3>Please select a topic.</h3>
            </Route>
            <Route path={`${path}/:topicId`}>
              <Topic />
            </Route>
          </Switch>
        </div>
      );
    }
    
    function Topic() {
      // The <Route> that rendered this component has a
      // path of `/topics/:topicId`. The `:topicId` portion
      // of the URL indicates a placeholder that we can
      // get from `useParams()`.
      let { topicId } = useParams();
    
      return (
        <div>
          <h3>{topicId}</h3>
        </div>
      );
    }
    

    4. Redirect

    import React from "react";
    import {
      BrowserRouter as Router,
      Switch,
      Route,
      Link,
      Redirect,
      useHistory,
      useLocation,
    } from "react-router-dom";
    
    // This example has 3 pages: a public page, a protected
    // page, and a login screen. In order to see the protected
    // page, you must first login. Pretty standard stuff.
    //
    // First, visit the public page. Then, visit the protected
    // page. You're not yet logged in, so you are redirected
    // to the login page. After you login, you are redirected
    // back to the protected page.
    //
    // Notice the URL change each time. If you click the back
    // button at this point, would you expect to go back to the
    // login page? No! You're already logged in. Try it out,
    // and you'll see you go back to the page you visited
    // just *before* logging in, the public page.
    
    export default function AuthExample() {
      return (
        <Router>
          <div>
            <AuthButton />
    
            <ul>
              <li>
                <Link to="/public">Public Page</Link>
              </li>
              <li>
                <Link to="/protected">Protected Page</Link>
              </li>
            </ul>
    
            <Switch>
              <Route path="/public">
                <PublicPage />
              </Route>
              <Route path="/login">
                <LoginPage />
              </Route>
              <PrivateRoute path="/protected">
                <ProtectedPage />
              </PrivateRoute>
            </Switch>
          </div>
        </Router>
      );
    }
    
    const fakeAuth = {
      isAuthenticated: false,
      authenticate(cb) {
        fakeAuth.isAuthenticated = true;
        setTimeout(cb, 100); // fake async
      },
      signout(cb) {
        fakeAuth.isAuthenticated = false;
        setTimeout(cb, 100);
      },
    };
    
    function AuthButton() {
      let history = useHistory();
    
      return fakeAuth.isAuthenticated ? (
        <p>
          Welcome!{" "}
          <button
            onClick={() => {
              fakeAuth.signout(() => history.push("/"));
            }}
          >
            Sign out
          </button>
        </p>
      ) : (
        <p>You are not logged in.</p>
      );
    }
    
    // A wrapper for <Route> that redirects to the login
    // screen if you're not yet authenticated.
    function PrivateRoute(props) {
      const { children, ...rest } = props;
    
      return (
        <Route
          {...rest}
          render={({ location }) => {
            return fakeAuth.isAuthenticated ? (
              children
            ) : (
              <Redirect
                to={{
                  pathname: "/login",
                  state: { from: location },
                }}
              />
            );
          }}
        />
      );
    }
    
    function PublicPage() {
      return <h3>Public</h3>;
    }
    
    function ProtectedPage() {
      return <h3>Protected</h3>;
    }
    
    function LoginPage() {
      let history = useHistory();
      let location = useLocation();
    
      let { from } = location.state || { from: { pathname: "/" } };
      let login = () => {
        fakeAuth.authenticate(() => {
          history.replace(from);
        });
      };
    
      return (
        <div>
          <p>You must log in to view the page at {from.pathname}</p>
          <button onClick={login}>Log in</button>
        </div>
      );
    }
    
    

    相关文章

      网友评论

          本文标题:react route example-1

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