Sử dụng Thành phần liên kết Gatsby để điều hướng giữa các trang
Bây giờ ta đã xem qua những điều cơ bản về cách làm việc với Gatsby để xây dựng một trang web tĩnh, hãy bắt đầu khám phá một số nội dung bên trong của nó. Đối với bài đăng này, tôi sẽ đề cập đến thành phần Liên kết Gatsby, thành phần này bao bọc thành phần Liên kết được gạch dưới của Bộ định tuyến tiếp cận , mà Gatsby sử dụng nội bộ để định tuyến.
 Thành phần Liên kết được sử dụng để  chuyển  giữa các trang nội bộ của trang web Gatsby thay vì sử dụng các thẻ liên kết ( a ) thông thường. Những lợi ích của việc sử dụng Liên kết thay vì một neo thông thường là:
- Gatsby sẽ hiển thị trước một cách thông minh nội dung được liên kết đến
 - Trạng thái có thể được chuyển đến trang được liên kết đến
 - Kiểu tùy chỉnh hoặc một lớp tùy chỉnh có thể được thêm vào liên kết khi trang đang hoạt động tương ứng với liên kết.
 -  Đây là trường hợp sử dụng nâng cao hơn một chút, nhưng đối tượng lịch sử của trình duyệt có thể được kiểm soát khi sử dụng thành phần 
Link. 
Sử dụng <Link />
 Sử dụng thành phần liên kết rất đơn giản, chỉ cần nhập nó và sử dụng nó với ít nhất là to prop, nó sẽ trỏ đến một đường dẫn tương đối trên trang web:
import React from 'react';
import { Link } from 'gatsby';
const AuthorCard = ({ author }) => {
  return (
    <div>
      <img src={author.avatar.children[0].fixed.src} alt={author.name} />
      <p>
        <Link to={`/author/${author.id}/`}>More posts</Link>
      </p>
    </div>
  );
};
export default AuthorCard;
Bạn cũng có thể chuyển vào bất kỳ chỗ dựa nào mà bạn thường sử dụng trên thẻ liên kết. Ví dụ: hãy thêm title vào liên kết của  ta :
<Link
  to={`/author/${author.id}/`}
  title={`View all posts by ${author.name}`}
>
  More posts
</Link>
Khi liên kết với một domain bên ngoài hoặc đến một trang web khác không phải Gatsby trên cùng một domain , hãy sử dụng các thẻ liên kết thông thường.
Trang đang hoạt động
 Bạn có thể tạo kiểu các liên kết trên trang đang hoạt động theo cách khác nhau bằng cách sử dụng đối tượng kiểu hoặc tên lớp. Đối với một đối tượng kiểu, hãy sử dụng hỗ trợ activeStyle :
<Link
  to={`/about/`}
  activeStyle={{ textDecoration: "salmon double underline" }}
>
  About Us
</Link>
Và để sử dụng tên lớp thay thế, hãy chỉ định một phần activeClassName hỗ trợ activeClassName :
<Link to={`/about/`} activeClassName="active">
  About Us
</Link>
Liên kết với Trang chủ
 Để trỏ đến trang chủ, chỉ cần sử dụng / làm giá trị cho các to chống đỡ:
<Link to="/">Go home</Link>
Trạng thái chuyển tiếp
 Thành phần Link cũng chấp nhận một hỗ trợ state và trang nhận sẽ có quyền truy cập vào những gì được chuyển vào hỗ trợ đó thông qua location prop , tại location.state :
<Link to="/" state={{returningVisitor: true}}>
  Go home
</Link>
Liên kết có lập trình với navigate
 Khi bạn cần sử dụng chức năng của thành phần Link , nhưng phải làm như vậy theo chương trình bên ngoài đánh dấu JSX, bạn có thể sử dụng chức năng trình trợ giúp navigate :
import React from 'react';
import { navigate } from 'gatsby';
handleSubmit = e => {
  e.preventDefault();
  const form = e.target;
  // ...do stuff here to submit the form data
  // (e.g.: using the fetch API)
  // Then navigate to the path that corresponds to the form's
  // action attribute 
  navigate(form.getAttribute('action');
};
navigate lấy đối số thứ 2 tùy chọn, đối số này phải là một đối tượng mà bạn có thể chỉ định state để chuyển vào và / hoặc nếu lịch sử trình duyệt nên được thay thế:
navigate(form.getAttribute('action', {
  state: { message: 'Thanks a bunch!' },
  replace: true
});
withPrefix & pathPrefix
 Nếu trang web production  của bạn được lưu trữ trong một folder  con,  bạn cần  đặt giá trị cho pathPrefix bên trong file  gatsby-config.js của trang web. Bằng cách này, Gatsby sẽ xây dựng chính xác các URL để liên kết đến  mức thấp  và mọi thứ sẽ chỉ hoạt động local  khi phát triển và production .
 Bạn cũng có thể sử dụng phương thức trợ giúp withPrefix để thêm tiền tố của trang web theo cách thủ công. Điều này có thể hữu ích khi cần các đường dẫn tuyệt đối:
import React from 'react';
import Helmet from 'react-helmet';
import { withPrefix } from 'gatsby';
const Index = props => {
  return (
    <>
      <Helmet>
        <link rel="icon" sizes="32x32" href={withPrefix('favicon-32x32.png')} />
        <link rel="icon" sizes="192x192" href={withPrefix('favicon-192x192.png')} />
        {/* More stuff here... */}
      </Helmet>
      <div className={props.className}>
        {props.children}
      </div>
    </>
  );
};
export default Index;
🔗  Đến đây bạn  có thể tiếp tục và bắt đầu liên kết với tất cả mọi thứ! Để có cái nhìn sâu hơn về thành phần Link của Gatsby, hãy xem tài liệu chính thức .
Các tin liên quan

