Wouter е библиотека, която ни позволява да зареждаме компоненти на React според URL адреси.

В тази статия ще разгледаме как да добавите маршрутизиране към приложение на React с Wouter.

Redirect

Можем да пренасочим към друг компонент на маршрута с функцията setLocation.

Например, можем да напишем:

import React from "react";
import { Route, Router, useLocation } from "wouter";
const InboxPage = () => {
  return (
    <div>
      <p>inbox</p>
    </div>
  );
};
export default function App() {
  const [, setLocation] = useLocation();
  return (
    <div>
      <a href="#" onClick={() => setLocation("/about")}>
        About
      </a>
      <Router>
        <Route path="/about">
          <p>About Us</p>
        </Route>
        <Route path="/users/:name">
          {(params) => <div>Hello, {params.name}!</div>}
        </Route>
        <Route path="/inbox" component={InboxPage} />
      </Router>
    </div>
  );
}

Извикваме куката useLocation, за да върнем функцията setLocation.

След това извикваме това в манипулатора onClick, за да отидем до маршрута /about.

Съвпадение на динамични сегменти

Можем да използваме куката useRoute, за да съпоставим динамични сегменти от маршрута.

Например, ние пишем:

import React from "react";
import { Link, Route, Router, useRoute } from "wouter";
const InboxPage = () => {
  return (
    <div>
      <p>inbox</p>
    </div>
  );
};
const UserPage = () => {
  const [, params] = useRoute("/users/:name");
  return <div>Hello, {params.name}!</div>;
};
export default function App() {
  return (
    <div>
      <Router>
        <Link href="/users/foo">Users</Link>
        <Route path="/about">
          <p>About Us</p>
        </Route>
        <Route path="/users/:name" component={UserPage}></Route>
        <Route path="/inbox" component={InboxPage} />
      </Router>
    </div>
  );
}

В UserPage извикваме useroute куката с модела на маршрута, за да получим параметъра name от params обекта.

В подложката path на Route имаме контейнера :name, за да добавим контейнера.

Можем също да съпоставим шаблона /foo?/:bar*, за да добавим заместителя bar.

/foo/baz? има незадължителния контейнер baz.

И /foo/bar+ с bar като един или повече сегменти също се поддържа за съвпадение.

Основен път

Можем да добавим основен път с base prop на компонента Router.

Например, ние пишем:

import React from "react";
import { Link, Route, Router, useRoute } from "wouter";
const InboxPage = () => {
  return (
    <div>
      <p>inbox</p>
    </div>
  );
};
const UserPage = () => {
  const [, params] = useRoute("/users/:name");
  return <div>Hello, {params.name}!</div>;
};
export default function App() {
  return (
    <div>
      <Router base="/app">
        <Link href="/users/foo">Users</Link>
        <Route path="/about">
          <p>About Us</p>
        </Route>
        <Route path="/users/:name" component={UserPage}></Route>
        <Route path="/inbox" component={InboxPage} />
      </Router>
    </div>
  );
}

за да зададете основния път на /app .

Маршрут по подразбиране

Можем да добавим маршрут по подразбиране, като добавим компонента Route, без да добавяме prop path.

Например, ние пишем:

import React from "react";
import { Route, Switch } from "wouter";
export default function App() {
  return (
    <div>
      <Switch>
        <Route path="/about">
          <p>About Us</p>
        </Route>
        <Route>Not Found</Route>
      </Switch>
    </div>
  );
}

за да добавите маршрута Not Found.

Маршрутът по подразбиране винаги трябва да е последен, така че другите модели да могат да бъдат проверени, преди да се покаже ненамереният маршрут.

Заключение

Можем да добавим пренасочвания, да съпоставим динамични сегменти от маршрути, да зададем основния път и да добавим маршрут по подразбиране с Wouter в нашето приложение React.

Повече съдържание на plainenglish.io