찾다
웹 프론트엔드JS 튜토리얼React-router v4 사용 단계에 대한 자세한 설명

이번에는 React-router v4를 사용하는 단계와 React-router v4를 사용할 때 주의사항에 대해 자세히 설명하겠습니다. 실제 사례를 살펴보겠습니다.

아마도 반응 라우터를 배우는 가장 좋은 방법은 반응 라우터-dom v4를 사용하여 다중 페이지 반응 애플리케이션을 작성하는 것입니다. 이 반응 애플리케이션에는 로그인, 등록, 홈페이지, 연락처 및 기타 페이지가 포함됩니다. 하지만 먼저 React Router v4의 개념과 v3과의 차이점을 살펴보겠습니다.

React 라우터 v4 대 v3

v4는 React 라우터를 다시 작성한 것이므로 v3와 많은 차이점이 있습니다. 주요 내용은 다음과 같습니다.

  • 반응 라우터 v4에서는 라우팅이 더 이상 중앙 집중화되지 않습니다. 이는 애플리케이션 레이아웃 및 UI의 일부가 됩니다.

  • 브라우저가 사용하는 라우터는 react-router-dom에 있습니다. 따라서 브라우저에서 사용할 때에는 react-router-dom만 import하면 됩니다. react-router-dom里。所以,浏览器里使用的时候只需要import react-router-dom就可以。

  • 新的概念BrowerRouterHashRouter。他们各自服务于不同的情景下。详见下文。

  • 不在使用{props.children}来处理嵌套的路由。

  • v4的路由默认不再排他,会有多个匹配。而v3是默认排他的,只会有一个匹配被使用。

react-router-dom是react-router中用于浏览器的。react-router被分为一下几部分:

  • react-router是浏览器和原生应用的通用部分。

  • react-router-dom是用于浏览器的。

  • react-router-native是用于原生应用的。

React-router vs react-router-dom vs react-router-native

react-router是核心部分。react-router-dom提供了浏览器使用需要的定制组件。react-router-native则专门提供了在原生移动应用中需要用到的部分。所以,如果在本例中实现浏览器开发就只需要安装react-router-dom

安装

如上所说,我们使用react开发web应用,所以只需要安装react-router-dom

  npm install react-router-dom --save

理解和使用react-router

  • BrowserRouter,这是对Router接口的实现。使得页面和浏览器的history保持一致。如:window.location

  • HashRouter,和上面的一样,只是使用的是url的hash部分,比如:window.location.hash

  • MemoryRouter

  • NativeRouter,处理react native内的路由。

  • <a href="http://www.php.cn/wiki/188.html" target="_blank">Static</a>Router,处理静态路由,和v3一样。

BrowserRouter vs HashRouter

在react-router的各种router中,<browserrouter></browserrouter><hashrouter></hashrouter>是可以在浏览器中使用的。如果你使用的是一个非静态的站点、要处理各种不同的url那么你就需要使用BrowserRouter。相反的如果你的server只处理静态的url,那么就使用HashRouter

理解和使用Route

组件是react router v4里最有用的组件。背后的使用哲学也很简单,无论何时你需要在匹配某个路径的时候绘制一个组件,那么就可以使用Route组件。

Route组件可以使用如下的属性:

  • path属性,字符串类型,它的值就是用来匹配url的。

  • component属性,它的值是一个组件。在path

  • 새로운 개념인 BrowerRouterHashRouter. 그들은 각각 다른 상황에 처해 있습니다. 자세한 내용은 아래를 참조하세요.

  • 더 이상 {props.children}을 사용하여 중첩된 경로를 처리하지 않습니다.

    🎜🎜v4 라우팅은 더 이상 기본적으로 배타적이지 않으며 여러 일치 항목이 있습니다. v3은 기본적으로 배타적이며 일치 항목이 하나만 사용됩니다. 🎜🎜
🎜react-router-dom은 브라우저용 반응 라우터에서 사용됩니다. react-router는 다음 부분으로 나뉩니다. 🎜🎜🎜🎜react-router는 브라우저와 기본 애플리케이션의 공통 부분입니다. 🎜🎜🎜🎜react-router-dom은 브라우저용입니다. 🎜🎜🎜🎜react-router-native는 기본 애플리케이션용입니다. 🎜🎜🎜React-router vs React-router-dom vs React-router-native🎜🎜react-router가 핵심 부분입니다. react-router-dom은 브라우저 사용에 필요한 맞춤 구성요소를 제공합니다. react-router-native는 네이티브 모바일 애플리케이션에 필요한 부분을 구체적으로 제공합니다. 따라서 이 예시에서 브라우저 개발을 구현한다면 react-router-dom만 설치하면 됩니다. 🎜🎜Installation🎜🎜위에서 언급한 것처럼 우리는 웹 애플리케이션 개발에 React를 사용하기 때문에 react-router-dom만 설치하면 됩니다. 🎜
&lt;route&gt;&lt;/route&gt;
🎜Router 인터페이스의 구현인 React-router🎜🎜🎜🎜BrowserRouter를 이해하고 사용하세요. 페이지와 브라우저 기록을 일관되게 만드세요. 예: window.location. 🎜🎜🎜🎜HashRouterwindow.location.hash와 같이 URL의 해시 부분을 사용한다는 점을 제외하면 위와 동일합니다. 🎜🎜🎜🎜MemoryRouter, 🎜🎜🎜🎜NativeRouter는 반응 네이티브에서 라우팅을 처리합니다. 🎜🎜🎜🎜<a href="http://www.php.cn/wiki/188.html" target="_blank">Static🎜Router</a>, v3와 동일하게 정적 라우팅을 처리합니다. . 🎜🎜

BrowserRouter vs HashRouter

🎜react-router의 다양한 라우터 중에서 <browserrouter></browserrouter>를 브라우저에서 사용할 수 있습니다. 비정적 사이트를 사용하고 있으며 다양한 URL을 처리하려면 BrowserRouter를 사용해야 합니다. 반대로 서버가 정적 URL만 처리하는 경우 HashRouter를 사용하세요. 🎜🎜Route 이해 및 사용🎜🎜 구성요소는 React Router v4에서 가장 유용한 구성요소입니다. 그 뒤에 숨겨진 사용 철학도 매우 간단합니다. 특정 경로를 일치시킬 때 구성 요소를 그려야 할 때마다 Route 구성 요소를 사용할 수 있습니다. 🎜🎜Route 구성 요소는 다음 속성을 사용할 수 있습니다: 🎜🎜🎜🎜path 속성, String 🎜 유형, 해당 값은 URL과 일치하는 데 사용됩니다. 🎜🎜🎜🎜컴포넌트 속성, 그 값은 컴포넌트입니다. 이 구성요소는 경로가 성공적으로 일치된 후에 그려집니다. 🎜🎜🎜🎜정확한 속성, 이 속성은 이 경로가 독점 일치하는지 여부를 나타내는 데 사용됩니다. 🎜🎜🎜🎜strict 속성, 이 속성은 경로가 슬래시로 끝나는 경로와만 일치하도록 지정합니다. 🎜

还有其他的一些属性,可以用来代替component属性。

  • render属性,一个返回React组件的方法。传说中的rencer-prop就是从这里来的。

  • children属性,返回一个React组件的方法。只不过这个总是会绘制,即使没有匹配的路径的时候。

多数的时候是用component属性就可以满足。但是,某些情况下你不得不使用renderchildren属性。

  • match

  • location

  • history

如:
使用组件:

&lt;route&gt;&lt;/route&gt;

使用render属性实现内联绘制:

<route><p>HomePage</p>} /></route>

来看哥更复杂的:

const FadingRoute = ({ component, ...rest }) => (
  <route> (
    <fadein>
      <componnet></componnet>
    </fadein>
  )} />
)
<fadingroute></fadingroute></route>

使用children


         
const ListItemLink = ({to, ...rest}) => (    (     
  •       <link>     
  •   )} /> )

    更多关于react-router v4如何匹配路径的内容,请移步这里。

    URL / Path / Route的参数

    通常情况下,我们都会在路径里添加参数。这样方便在不同的组件之间传递一些必要的数据。那么我们如何才能获取到这些传递的参数,并传递给组件中呢?我们只需要在路径的最后加上/:param。如:

    &lt;route&gt;&lt;/route&gt;
    const HomePage = ({match}) => (
      

        

     parameter => {match.params.param1}    );

    一旦有路径可以匹配成功,那么就会穿件一个拥有如下属性的对象,并传入绘制的组件里:

    • url: 匹配的url。

    • path:就是path。

    • isExact:如果path和当前的widnow.location的path部分完全相同的话。

    • params:在URL里包含的参数。

    Link是react router v4特有的一个组件。是用来代替上一版的anchor link。使用Link可以在React应用的不同页面之间跳转。与unclor会重新加载整个页面不同,Link只会重新加载页面里和当前url可以匹配的部分。

    Link组件需要用到to属性,这个属性的值就是react router要跳转到的地址。如:

    import { Link } from 'react-router-dom';
    const Nav = () => (
      <link>Home
    );

    当被点击的时候,会跳转到路径:/

    to属性的值可以是一个字符串,也可以是一个location(pathname, hash, state和search)对象。比如:

    <link>

    Link也可以使用replace属性,如果点击的话,那么history里的当前领会被replace。

    <link>和

    NavLinkLink的一个子类,在Link组件的基础上增加了绘制组件的样式,比如:

    <navlink>
      My Profile
    </navlink>

    使用react router dom实现你的第一个demo

    现在我们用react router dom来实现第一个demo。

    首先,引入必要的组件。比如:RouteBrowserRouter

    import { BrowserRouter, Route } from 'react-router-dom';

    接下来,我们创建一些组件和一些Html标签。同时我们用react router v4里的LinkNavLink组件。

    const BaseLayout = () => (
      

        

          

    React Router v4 Browser Example

               
        

          &lt;route&gt;&lt;/route&gt;       &lt;route&gt;&lt;/route&gt;       &lt;route&gt;&lt;/route&gt;       &lt;route&gt;&lt;/route&gt;       &lt;route&gt;&lt;/route&gt;       &lt;route&gt;&lt;/route&gt;     

        
          React Router v4 Browser Example (c) 2017     
       );

    然后我们来创建需要的组件:

    const HomePage = () => <p>This is a Home Page</p>
    const LoginPage = () => <p>This is a Login Page</p>
    const RegisterPage = () => <p>This is a Register Page</p>
    const ProfilePage = () => <p>This is a Profile Page</p>
    const AboutPage = () => <p>This is a About Page</p>
    const ContactPage = () => <p>This is a Contact Page</p>

    最后,写App组件。

    const App = () => (
      <browserrouter>
        <baselayout></baselayout>
      </browserrouter>
    )
    render(<app></app>, document.getElementById('root'));

    如你所见,react router v4的组件还非常的易用的。

    理解和使用非排他的路由

    在上例中,我们在HomePage组件的路由里使用了属性exact

    &lt;route&gt;&lt;/route&gt;

    这是因为v4中的路由默认都是非排他的,这一点和v3的实现思路截然不同。如果没有exact属性,HomePage组件和其他的组件就会同事绘制在页面上。

    如,当用户点了登录连接以后,"/""/login"都满足匹配条件,对应的登录组件和Home组件就会同时出现在界面上。但是,这不是我们期待的结果,所以我们要给"/"path加上exact属性。

    现在我们来看看非排他的路由有什么优点。假如我们有一个子菜单组件需要显示在profile页面出现的时候也出现。我们可以简单的修改BasicLayout来实现。

    const BaseLayout = () =>  (
      

        

          

    React Router v4 Browser Example

               
      

    );

    这样我们就会看到对应于"/me"路径的组件都绘制出来了。这就是非排他路由的好处。

    理解排他路由

    排他路由是react router v3的默认实现。只有第一个匹配的路由对应的组件会被绘制。这一点也可以用react router v4的Switch组件来实现。在Switch组件中,只有第一个匹配的路由&lt;route&gt;&lt;/route&gt;或者&lt;redirect&gt;&lt;/redirect&gt;会被绘制:

    import { Switch, Route } from 'react-router';
    
      &lt;route&gt;&lt;/route&gt;
      &lt;route&gt;&lt;/route&gt;
      &lt;route&gt;&lt;/route&gt;
      &lt;route&gt;&lt;/route&gt;
    

    浏览器历史

    react router v4中,提供了一个history对象。这个对象包含了多个api,可以用来操作浏览器历史等。

    你也可以在React应用里使用history对象的方法:

    history.push("/my-path")
    history.replace("/my-path")

    用另外的方法可以写成:

    <link>
    &lt;redirect&gt;&lt;/redirect&gt;

    使用组件实现重定向

    无论何时你要重定向到另外一个地址的时候,都可以使用Redirect组件:

    &lt;redirect&gt;&lt;/redirect&gt;

    或者,更为简单的:

    &lt;redirect&gt;&lt;/redirect&gt;

    最后

    react router v4让开发react应用变得更加的简单。让react应用内的页面跳转更加简单。你只需要声明一个BrowserRouter或者HashRouter,然后在它的内部放上一系列的Route组件,这些主键只要包含pathcomponent属性。无论何时有了匹配的路由,那么它就会进行非排他的绘制(所有匹配的路由都会绘制)。你也可以把Route放在Switch组件里来实现排他的绘制(只有第一个匹配的路由会被绘制)。你可以在路径中传递参数,match对象会保留这些参数。最后,所有在web中使用的路由组件都包含在react-router-dom中。只需要引入react-router-dom就可以使用。

    相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

    推荐阅读:

    Chart.js 轻量级HTML5图表绘制工具库使用步骤详解

    Chart.js轻量级图表库使用案例解析

    위 내용은 React-router v4 사용 단계에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    성명
    본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
    C/C에서 JavaScript까지 : 모든 것이 어떻게 작동하는지C/C에서 JavaScript까지 : 모든 것이 어떻게 작동하는지Apr 14, 2025 am 12:05 AM

    C/C에서 JavaScript로 전환하려면 동적 타이핑, 쓰레기 수집 및 비동기 프로그래밍으로 적응해야합니다. 1) C/C는 수동 메모리 관리가 필요한 정적으로 입력 한 언어이며 JavaScript는 동적으로 입력하고 쓰레기 수집이 자동으로 처리됩니다. 2) C/C를 기계 코드로 컴파일 해야하는 반면 JavaScript는 해석 된 언어입니다. 3) JavaScript는 폐쇄, 프로토 타입 체인 및 약속과 같은 개념을 소개하여 유연성과 비동기 프로그래밍 기능을 향상시킵니다.

    JavaScript 엔진 : 구현 비교JavaScript 엔진 : 구현 비교Apr 13, 2025 am 12:05 AM

    각각의 엔진의 구현 원리 및 최적화 전략이 다르기 때문에 JavaScript 엔진은 JavaScript 코드를 구문 분석하고 실행할 때 다른 영향을 미칩니다. 1. 어휘 분석 : 소스 코드를 어휘 단위로 변환합니다. 2. 문법 분석 : 추상 구문 트리를 생성합니다. 3. 최적화 및 컴파일 : JIT 컴파일러를 통해 기계 코드를 생성합니다. 4. 실행 : 기계 코드를 실행하십시오. V8 엔진은 즉각적인 컴파일 및 숨겨진 클래스를 통해 최적화하여 Spidermonkey는 유형 추론 시스템을 사용하여 동일한 코드에서 성능이 다른 성능을 제공합니다.

    브라우저 너머 : 실제 세계의 JavaScript브라우저 너머 : 실제 세계의 JavaScriptApr 12, 2025 am 12:06 AM

    실제 세계에서 JavaScript의 응용 프로그램에는 서버 측 프로그래밍, 모바일 애플리케이션 개발 및 사물 인터넷 제어가 포함됩니다. 1. 서버 측 프로그래밍은 Node.js를 통해 실현되며 동시 요청 처리에 적합합니다. 2. 모바일 애플리케이션 개발은 재교육을 통해 수행되며 크로스 플랫폼 배포를 지원합니다. 3. Johnny-Five 라이브러리를 통한 IoT 장치 제어에 사용되며 하드웨어 상호 작용에 적합합니다.

    Next.js (백엔드 통합)로 멀티 테넌트 SAAS 애플리케이션 구축Next.js (백엔드 통합)로 멀티 테넌트 SAAS 애플리케이션 구축Apr 11, 2025 am 08:23 AM

    일상적인 기술 도구를 사용하여 기능적 다중 테넌트 SaaS 응용 프로그램 (Edtech 앱)을 구축했으며 동일한 작업을 수행 할 수 있습니다. 먼저, 다중 테넌트 SaaS 응용 프로그램은 무엇입니까? 멀티 테넌트 SAAS 응용 프로그램은 노래에서 여러 고객에게 서비스를 제공 할 수 있습니다.

    Next.js (Frontend Integration)를 사용하여 멀티 테넌트 SaaS 응용 프로그램을 구축하는 방법Next.js (Frontend Integration)를 사용하여 멀티 테넌트 SaaS 응용 프로그램을 구축하는 방법Apr 11, 2025 am 08:22 AM

    이 기사에서는 Contrim에 의해 확보 된 백엔드와의 프론트 엔드 통합을 보여 주며 Next.js를 사용하여 기능적인 Edtech SaaS 응용 프로그램을 구축합니다. Frontend는 UI 가시성을 제어하기 위해 사용자 권한을 가져오고 API가 역할 기반을 준수하도록합니다.

    JavaScript : 웹 언어의 다양성 탐색JavaScript : 웹 언어의 다양성 탐색Apr 11, 2025 am 12:01 AM

    JavaScript는 현대 웹 개발의 핵심 언어이며 다양성과 유연성에 널리 사용됩니다. 1) 프론트 엔드 개발 : DOM 운영 및 최신 프레임 워크 (예 : React, Vue.js, Angular)를 통해 동적 웹 페이지 및 단일 페이지 응용 프로그램을 구축합니다. 2) 서버 측 개발 : Node.js는 비 차단 I/O 모델을 사용하여 높은 동시성 및 실시간 응용 프로그램을 처리합니다. 3) 모바일 및 데스크탑 애플리케이션 개발 : 크로스 플랫폼 개발은 개발 효율을 향상시키기 위해 반응 및 전자를 통해 실현됩니다.

    JavaScript의 진화 : 현재 동향과 미래 전망JavaScript의 진화 : 현재 동향과 미래 전망Apr 10, 2025 am 09:33 AM

    JavaScript의 최신 트렌드에는 Typescript의 Rise, 현대 프레임 워크 및 라이브러리의 인기 및 WebAssembly의 적용이 포함됩니다. 향후 전망은보다 강력한 유형 시스템, 서버 측 JavaScript 개발, 인공 지능 및 기계 학습의 확장, IoT 및 Edge 컴퓨팅의 잠재력을 포함합니다.

    Demystifying JavaScript : 그것이하는 일과 중요한 이유Demystifying JavaScript : 그것이하는 일과 중요한 이유Apr 09, 2025 am 12:07 AM

    JavaScript는 현대 웹 개발의 초석이며 주요 기능에는 이벤트 중심 프로그래밍, 동적 컨텐츠 생성 및 비동기 프로그래밍이 포함됩니다. 1) 이벤트 중심 프로그래밍을 사용하면 사용자 작업에 따라 웹 페이지가 동적으로 변경 될 수 있습니다. 2) 동적 컨텐츠 생성을 사용하면 조건에 따라 페이지 컨텐츠를 조정할 수 있습니다. 3) 비동기 프로그래밍은 사용자 인터페이스가 차단되지 않도록합니다. JavaScript는 웹 상호 작용, 단일 페이지 응용 프로그램 및 서버 측 개발에 널리 사용되며 사용자 경험 및 크로스 플랫폼 개발의 유연성을 크게 향상시킵니다.

    See all articles

    핫 AI 도구

    Undresser.AI Undress

    Undresser.AI Undress

    사실적인 누드 사진을 만들기 위한 AI 기반 앱

    AI Clothes Remover

    AI Clothes Remover

    사진에서 옷을 제거하는 온라인 AI 도구입니다.

    Undress AI Tool

    Undress AI Tool

    무료로 이미지를 벗다

    Clothoff.io

    Clothoff.io

    AI 옷 제거제

    AI Hentai Generator

    AI Hentai Generator

    AI Hentai를 무료로 생성하십시오.

    인기 기사

    R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
    3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O. 최고의 그래픽 설정
    3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
    3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
    WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
    4 몇 주 전By尊渡假赌尊渡假赌尊渡假赌

    뜨거운 도구

    SublimeText3 Linux 새 버전

    SublimeText3 Linux 새 버전

    SublimeText3 Linux 최신 버전

    에디트플러스 중국어 크랙 버전

    에디트플러스 중국어 크랙 버전

    작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

    PhpStorm 맥 버전

    PhpStorm 맥 버전

    최신(2018.2.1) 전문 PHP 통합 개발 도구

    SublimeText3 Mac 버전

    SublimeText3 Mac 버전

    신 수준의 코드 편집 소프트웨어(SublimeText3)

    메모장++7.3.1

    메모장++7.3.1

    사용하기 쉬운 무료 코드 편집기