- vừa được xem lúc

Làm một chút demo với React Router nào !!!

0 0 78

Người đăng: Bui Hoang Ky

Theo Viblo Asia

CLo anh em ?

Hôm nay mình sẽ cùng mọi người tìm hiểu qua một chút về cách sử dụng của thằng Router trong React js, nhằm mục đích hỗ trợ các anh em đang tập tành làm quen với React js.

Vào việc luôn thôi nào !!!

Học cái gì thì đầu tiên cũng nên biết về khái niệm của nó đúng không :

Vậy thì React Router là gì ???

Như mọi người cũng đã biết, trong React thì các components được coi như một trái tim đầy sức mạnh, nhưng bản thân React lại không hỗ trợ Router. Chính vì vậy , React Router ra đời nhằm hộ trợ việc định tuyến (routing) tiêu chuẩn trong React. React Router giúp cho giao diện của ứng dụng đồng bộ với URL trên trình duyệt, định tuyến luồng dữ liệu trong ứng dụng một cách rõ ràng. Nói một cách đơn giản, nếu anh em đang có URL này , nó sẽ tương ứng với Route và giao diện tương ứng.

Theo mình thấy trên github thì phiên bản hiện tại là : v5.2.0.

Link github : https://github.com/ReactTraining/react-router

Bắt đầu nào :

Trước khi làm gì thì anh em cũng nên khởi tạo một project demo đúng ko :

npx create-react-app demo-react-router

Tiếp sau đó anh em cài đặt cho mình :

npm install react-router-dom

Để có thể tạo được routes, việc đầu tiên chúng ta cần làm là import BrowserRouter từ react-router-dom

import { BrowserRouter as Router, Switch, Route, Link
} from "react-router-dom";

Thằng BrowserRouter thì hay được sử dụng hơn, do nó sử dụng History API trong HTML 5 để theo dõi lịch sử bộ định tuyến.

Tiếp theo muốn tạo ra các route thì mọi thứ trong App.js cần phải được bao quanh bằng thẻ<Router>. Ở trên phần import, anh em có thể thấy mình sử dụng Switch

Mục đích sử dụng của thằng <Switch> này là gì ? Nó sẽ watch tất cả các thằng con trong <Route> và hiển thị phần tử đầu tiên có đường dẫn khớp với URL hiện tại. Switch được sử dụng bất cứ lúc nào khi mà chúng ta có quá nhiều routes, nhưng lại chỉ muốn một trong số chúng được render tại một thời điểm.

Okk sau khi thêm đầy đủ thì App.js của anh em sẽ như sau :

import './App.css';
import {BrowserRouter as Router, Route, Switch, Link} from "react-router-dom"; function App() { return ( <Router> <div> // Route của anh em đặt ở đây nhé </div> </Router> );
} export default App;

Do quá lười tạo folder nên anh em chịu khó thêm phần này dưới cho mình, mình không khuyến khích làm thế này nhé =)), các component nên được tách ra, anh em có thể xem lại bài viết này của mình : https://viblo.asia/p/7-lan-code-react-cua-ban-boc-mui-bWrZnm2QKxw

function Home() { return ( <div> <h2>Home</h2> </div> );
} function About() { return ( <div> <h2>About</h2> </div> );
} function Dashboard() { return ( <div> <h2>Dashboard</h2> </div> );
}

Rồi, giờ đến phần đăng kí các routes, để đăng kí được các routes, chúng ta sử dụng thẻ <Route>, thằng này thì bao gồm hai phần pathcomponent, path chính là phần mà chúng ta sẽ hiển thị trên URL, còn component chính là thành phần mà sẽ được trỏ đến khi nhập đúng route, thử nhé :

function App() { return ( <Router> <div> <Switch> <Route exact path="/"> <Home /> </Route> <Route path="/about"> <About /> </Route> <Route path="/dashboard"> <Dashboard /> </Route> </Switch> </div> </Router> );
}

Kết quả sẽ được như sau :

Okk thế là chúng ta đã tạo được route rồi, giờ mình lại có một vấn đề như sau, anh em cùng xem hình nhé :

Giờ khi mình muốn truy cập vào about/detail và muốn hiển thị About Detail thì sao ? mình lại giới thiệu cho anh em thuộc tính exact, exact được sử dụng trong <Route> để khẳng định rằng <Route> này chỉ hoạt động nếu URL trên trình duyệt phù hợp tuyệt đối với giá trị của thuộc tính trong path của nó :

 <Switch> <Route exact path="/"> <Home/> </Route> <Route exact path="/about"> <About/> </Route> <Route exact path="/about/detail"> <AboutDetail/> </Route> <Route path="/dashboard"> <Dashboard/> </Route> </Switch>

Thế là chúng ta sơ sơ đã sử dụng được về Route rồi đó, giờ để sử dụng bất kì route nào, chúng ta bắt đầu dùng để thằng <Link>, cách sử dụng nó như sau :

 <Link to="/about">About</Link>

Link bao gồm to, chính là route mà anh em muốn liên kết đến. Ngay say khi nhập /about, có thể thấy được ngay lập tức chúng ta sẽ thấy được những gì mà Component About sẽ hiển thị.

Bonus : Truyền tham số trong URL

Anh em tạo cho mình một component như sau :

import React from "react"; export const SpecificPost = ({ history, match }) => { return ( <div> <p className="m-3">This is post number {match.params.id} ?</p> <button className="btn btn-dark mx-3 my-2" onClick={() => { history.push("/posts"); }} > Back To Posts </button> </div> );
}; 

Sau đó import lại vào trong App.js :

import {SpecificPost} from "./SpecificPost";

Giờ chúng ta bắt đầu truyền tham số nhé :

<Route path="/posts/:id" component={SpecificPost} />

:id ở đây chỉ ra rằng nó có thể thay đổi động và có thể nhận các giá trị.

Bây giờ, giả sử muốn truy cập giá trị đó bên trong một component. Chúng ta có thể làm như vậy bằng cách sử dụng match, được sử dụng để truy cập giá trị trong đường dẫn động.

Okk, đó là toàn bộ những gì sơ bộ về React Router mà mình muốn giới thiệu với các anh em đang tìm hiểu về nó, lưu ý rằng đây là cách sử dụng sơ bộ thôi nhé , nếu muốn custom thêm mọi người có thể lên trang chủ mà mình đã để link bên trên để sử dụng thêm.

Đây là toàn bộ phần code mà mình đã demo hôm nay :

import './App.css';
import {BrowserRouter as Router, Route, Switch, Link} from "react-router-dom";
import {SpecificPost} from "./SpecificPost"; function App() { return ( <Router> <div> <ul> <li> <Link to="/">Home</Link> </li> <li> <Link to="/about">About</Link> </li> <li> <Link to="/dashboard">Dashboard</Link> </li> </ul> <hr/> <Switch> <Route exact path="/"> <Home/> </Route> <Route exact path="/about"> <About/> </Route> <Route exact path="/about/detail"> <AboutDetail/> </Route> <Route path="/dashboard"> <Dashboard/> </Route> <Route path="/posts/:id" component={SpecificPost}/> </Switch> </div> </Router> );
} function Home() { return ( <div> <h2>Home</h2> </div> );
} function About() { return ( <div> <h2>About</h2> </div> );
} function AboutDetail() { return ( <div> <h2>About Detail</h2> </div> );
} function Dashboard() { return ( <div> <h2>Dashboard</h2> </div> );
} export default App; 

Cảm ơn mọi người rất nhiều. Nếu thấy bài viết của mình hay, hãy upvote, likeshare nhé.

Many thankssss.

Bình luận

Bài viết tương tự

- vừa được xem lúc

Giới thiệu Typescript - Sự khác nhau giữa Typescript và Javascript

Typescript là gì. TypeScript là một ngôn ngữ giúp cung cấp quy mô lớn hơn so với JavaScript.

0 0 525

- vừa được xem lúc

Bạn đã biết các tips này khi làm việc với chuỗi trong JavaScript chưa ?

Hi xin chào các bạn, tiếp tục chuỗi chủ đề về cái thằng JavaScript này, hôm nay mình sẽ giới thiệu cho các bạn một số thủ thuật hay ho khi làm việc với chuỗi trong JavaScript có thể bạn đã hoặc chưa từng dùng. Cụ thể như nào thì hãy cùng mình tìm hiểu trong bài viết này nhé (go).

0 0 433

- vừa được xem lúc

Một số phương thức với object trong Javascript

Trong Javascript có hỗ trợ các loại dữ liệu cơ bản là giống với hầu hết những ngôn ngữ lập trình khác. Bài viết này mình sẽ giới thiệu về Object và một số phương thức thường dùng với nó.

0 0 153

- vừa được xem lúc

Tìm hiểu về thư viện axios

Giới thiệu. Axios là gì? Axios là một thư viện HTTP Client dựa trên Promise.

0 0 145

- vừa được xem lúc

Imports và Exports trong JavaScript ES6

. Giới thiệu. ES6 cung cấp cho chúng ta import (nhập), export (xuất) các functions, biến từ module này sang module khác và sử dụng nó trong các file khác.

0 0 110

- vừa được xem lúc

Bài toán đọc số thành chữ (phần 2) - Hoàn chỉnh chương trình dưới 100 dòng code

Tiếp tục bài viết còn dang dở ở phần trước Phân tích bài toán đọc số thành chữ (phần 1) - Phân tích đề và những mảnh ghép đầu tiên. Bạn nào chưa đọc thì có thể xem ở link trên trước nhé.

0 0 245