📄 添加一个新的曲目页面
我们已经设置好了服务器,我们知道查询 我们需要进行的。现在让我们看看如何通过创建曲目页面的基本代码来将它融入我们的用户流程。
让我们在client/src/pages
文件夹中创建一个新文件。我们将其命名为 track.js
。
我们在顶部导入 React
,然后导入 gql
和 useQuery
来自 @apollo/client
。我们将需要我们的 Layout
和 QueryResult
组件,最后,我们将从 react-router-dom
导入 useParams
。
import React from "react";import { gql, useQuery } from "@apollo/client";import { Layout, QueryResult } from "../components";import { useParams } from "react-router-dom";
现在让我们构建曲目页面的骨架。
我们将声明一个函数组件,在花括号内部,我们将从 useParams
函数返回的对象中解构 trackId
。这个 trackId
将作为参数从路由或浏览器的 URL 传递过来,我们将在稍后设置它。如果没有传递 trackId
,我们将将其设置为一个空字符串。
现在,让我们返回页面的布局。确保在下面导出组件。
const Track = () => {const { trackId = "" } = useParams();return <Layout></Layout>;};export default Track;
我们有一个空的曲目页面,很好。但是我们如何访问该页面呢?我们需要在我们的索引页面中添加一个新的路由。
🛣 添加一个新的路由
保持在同一个 pages
文件夹中,让我们打开 index.js
文件。在顶部,让我们导入我们的 Track
组件。
import Track from "./track";
import Track from "./track";
在 Routes
组件内部,在 Route
渲染 Tracks
之后,我们可以添加一个新的 Route
组件,将 Track
组件传递给它,并将它的 path 属性设置为 /track/:trackId
。
<Routes><Route element={<Tracks />} path="/" /><Route element={<Track />} path="/track/:trackId" /></Routes>
您可以在React Router 文档 中了解更多关于此路由工作方式的信息。现在,我们知道,如果我们访问浏览器中的此路径或 URL,并给它一个 trackId
,例如 c_0
,它将显示曲目页面。
在 client/src/pages
文件夹中的 index.js
文件应该看起来像这样:
import React from "react";import { BrowserRouter, Routes, Route } from "react-router-dom";import Tracks from "./tracks";import Track from "./track";export default function Pages() {return (<BrowserRouter><Routes><Route element={<Tracks />} path="/" /><Route element={<Track />} path="/track/:trackId" /></Routes></BrowserRouter>);}
让我们检查一下这个新的路由是否有效。
首先,让我们启动我们的客户端应用程序。打开一个新的终端,因为我们想让我们的服务器保持运行,然后使用 cd client
导航到客户端文件夹。运行 npm start
。
这应该在浏览器中打开一个页面到 http://127.0.0.1:3000/
或 localhost:3000,以显示主页。让我们导航到我们刚刚添加的新的路由: localhost:3000/track/c_0。我们应该看到一个空白的页面布局!我们将开始用从 查询 中检索到的数据来填充它。
💻 设置我们的客户端查询
再次打开 client/src/pages
文件夹中的 track.js
文件。
让我们构建我们的曲目 查询。我们将将其命名为 GET_TRACK
全部大写,并使用 gql
模板字面量。
export const GET_TRACK = gql`// our query goes here`;
现在,我们可以手动构建我们的 查询,或者,因为我们已经在 Sandbox 中完成了这项工作,让我们回到那里,复制我们 操作 面板中的查询,并将它粘贴到我们的 GET_TRACK
的 变量 中,就在 gql
标签的反引号之间。
query GetTrack($trackId: ID!) {track(id: $trackId) {idtitleauthor {idnamephoto}thumbnaillengthmodulesCountnumberOfViewsmodules {idtitlelength}description}}
$trackId
变量的值?将项目从这个框拖动到上面的空白处
graphql
useApolloClient
useQuery
gql
useState
在我们的 查询 设置好之后,我们现在就可以在下一课中使用 useQuery
钩子了。
分享您对本课的疑问和评论
您的反馈有助于我们改进!如果您遇到困难或困惑,请告诉我们,我们会帮助您。所有评论都是公开的,必须遵守 Apollo 行为准则。请注意,已解决或已处理的评论可能会被删除。
您需要一个 GitHub 帐户才能在下面发布。没有 GitHub 帐户? 改为在我们的奥德赛论坛中发布。