美文网首页程序员
react router example -3

react router example -3

作者: penelope_2bad | 来源:发表于2020-08-05 16:34 被阅读0次

    1. StaticRouter Context

    import React, { Component } from "react";
    import { StaticRouter as Router, Route } from "react-router-dom";
    
    // This example renders a route within a StaticRouter and populates its
    // staticContext, which it then prints out. In the real world you would
    // use the StaticRouter for server-side rendering:
    
    // import express from "express";
    // import ReactDOMServer from "react-dom/server";
    
    // const app = express()
    
    // app.get('*', (req, res) => {
    //   let staticContext = {}
    
    //   let html = ReactDOMServer.renderToString(
    //     <StaticRouter location={req.url} context={staticContext}>
    //       <App /> (includes the RouteStatus component below e.g. for 404 errors)
    //     </StaticRouter>
    //   );
    
    //   res.status(staticContext.statusCode || 200).send(html);
    // });
    
    // app.listen(process.env.PORT || 3000);
    
    
    
    function RouteStatus(props) {
      return (
        <Route
          render={({ staticContext }) => {
            // we have to check if staticContext exists
            // because it will be undefined if rendered through a BrowserRouter
            if (staticContext) {
              staticContext.statusCode = props.statusCode;
            }
    
            return <div>{props.children}</div>;
          }}
        />
      );
    }
    
    function PrintContext(props) {
      return <p>Static context: {JSON.stringify(props.staticContext)}</p>;
    }
    
    export default class StaticRouterExample extends Component {
      // This is the context object that we pass to the StaticRouter.
      // It can be modified by routes to provide additional information
      // for the server-side render
      staticContext = {};
    
      render() {
        return (
          <Router location="/foo" context={this.staticContext}>
            <div>
              <RouteStatus statusCode={404}>
                <p>Route with statusCode 404</p>
                <PrintContext staticContext={this.staticContext} />
              </RouteStatus>
            </div>
          </Router>
        );
      }
    }
    
    

    2. Query Parameters

    import React from "react";
    import { BrowserRouter as Router, Link, useLocation } from "react-router-dom";
    
    // React Router does not have any opinions about
    // how you should parse URL query strings.
    //
    // If you use simple key=value query strings and
    // you do not need to support IE 11, you can use
    // the browser's built-in URLSearchParams API.
    //
    // If your query strings contain array or object
    // syntax, you'll probably need to bring your own
    // query parsing function.
    
    export default function QueryParamsExample() {
      return (
        <Router>
          <QueryParamsDemo />
        </Router>
      );
    }
    
    // A custom hook that builds on useLocation to parse
    // the query string for you.
    function useQuery() {
      return new URLSearchParams(useLocation().search);
    }
    
    function QueryParamsDemo() {
      let query = useQuery();
      console.log("---query--", query, query.get("name"));
    
      return (
        <div>
          <div>
            <h2>Accounts</h2>
            <ul>
              <li>
                <Link to="/account?name=netflix">Netflix</Link>
              </li>
              <li>
                <Link to="/account?name=zillow-group">Zillow Group</Link>
              </li>
              <li>
                <Link to="/account?name=yahoo">Yahoo</Link>
              </li>
              <li>
                <Link to="/account?name=modus-create">Modus Create</Link>
              </li>
            </ul>
    
            <Child name={query.get("name")} />
          </div>
        </div>
      );
    }
    
    function Child({ name }) {
      return (
        <div>
          {name ? (
            <h3>
              The <code>name</code> in the query string is &quot;{name}
              &quot;
            </h3>
          ) : (
            <h3>There is no name in the query string</h3>
          )}
        </div>
      );
    }
    
    

    相关文章

      网友评论

        本文标题:react router example -3

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