我可以在 contentful-client 中使用“useSWR”来创建分页吗?

2024-01-04

我正在尝试使用 nextjs 和 useSWR 挂钩创建分页。

这就是我目前的做法,它似乎正在工作......但是我在文档中读到,作为第一个参数传递的密钥应该是一个唯一的字符串(通常是一个 URL)。我只是传递索引来获取正确的数据。我的方法会扰乱缓存吗?我不确定我这样做是否正确?

index.js

import React, { useState } from 'react'
import Page from '../components/page'

export default function IndexPage( ) {
  const [pageIndex, setPageIndex] = useState(0)

  return (
    <div>
      <Page index={pageIndex} />
      <button onClick={() => setPageIndex(pageIndex - 1)}>Previous</button>
      <button onClick={() => setPageIndex(pageIndex + 1)}>Next</button>
    </div>
  )
}

而在我的page.js

import useSWR from 'swr'
import { fetcher } from '../client/fetcher'

function Page({ index }) {
  const { data } = useSWR(index, fetcher)
  console.table(data)

  return <div>nothing here, just testing</div>

}

export default Page

最后是fetcher.js

import client from './contentful-client'

export async function fetcher(pageIndex = 1, limit = 3) {
  const data = await client.getEntries({
    content_type: 'posts',
    skip: pageIndex * limit,
    order: '-fields.publishDate',
    limit,
  })

  if (data) {
    return data
  }
  console.log('Something went wrong fetching data')
}

您可能希望将内容数据获取逻辑移至服务器,以免向浏览器公开凭据和逻辑。这可以使用以下方法完成Next.js API 路由 https://nextjs.org/docs/api-routes/introduction.

// pages/api/posts.js

import client from '<path-to>/contentful-client' // Replace with appropriate path to file

export default async function handler(req, res) {
    const { pageIndex = 1, limit = 3 } = req.query
    const data = await client.getEntries({
        content_type: 'posts',
        skip: pageIndex * limit,
        order: '-fields.publishDate',
        limit,
    })

    res.json(data)
}

然后,您可以重构页面中的代码,以针对新创建的 API 路由发出请求,并将路由 URL 作为密钥传递给useSWR.

import useSWR from 'swr'

const fetcher = (url) => fetch(url).then(res => res.json())

function Page({ index }) {
    const { data } = useSWR(`/api/posts?pageIndex=${index}`, fetcher)
    console.table(data)

    return <div>nothing here, just testing</div>
}

export default Page
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我可以在 contentful-client 中使用“useSWR”来创建分页吗? 的相关文章

  • 在 userCodeAppPanel 中看不到我的 javascript 代码

    这是来自 Google 电子表格中包含的脚本的代码 唯一的其他代码是onOpen它创建菜单和showDialog 功能 function showDialog userInterface HtmlService createHtmlOutp
  • 共享工作线程在重新加载页面时终止

    为什么 Shared Worker 在重新加载页面时死掉了 应该是复活了我该如何解决这个问题 重新加载前 重新加载后 在 example com 上按 F5 家长工人 var port new SharedWorker app worker
  • 检测对给定 JavaScript 事件的支持?

    我有兴趣使用 JavaScript hashchange 事件来监视 URL 片段标识符的更改 我知道非常简单的历史 http code google com p reallysimplehistory 以及用于此目的的 jQuery 插件
  • mocha.opts 已弃用,如何迁移到 package.json?

    我正在开发一个大型项目 自从上周我更新了摩卡以来 现在我们收到警告 DeprecationWarning 通过 mocha opts 进行的配置已被弃用并且 将从 Mocha 的未来版本中删除 使用 RC 文件或 改为 package js
  • 有没有办法将 Google 文档分割成多个 PDF?

    我想在 Google Scripts VBA 代码中复制我为 Word 文档编写的代码 基本上 它通过搜索我插入文档中的标签 将文档 切片 为多个 PDF 文件 目的是允许合唱团使用 forScore 管理乐谱的应用程序 在切片点插入先前注
  • Cordova SQLite 保存 BLOB

    我的 Cordova SQLite 插件有问题 如何将 BLOB 图像保存到 SQLite 我在 JS 中有 BLOB 对象 Blob size 96874 type image jpeg proto Blob length 1 我试图拯救
  • 刷新页面后保留输入值

    我有一个带有输入字段的表单 该输入包含一个下拉菜单 从数据库中读取信息 如果用户输入值 并且当他到达下拉菜单时 他没有找到他想要的内容 他会转到另一个页面将此信息添加到下拉菜单 然后转到第一页继续输入信息 如果他转到另一个页面向下拉菜单添加
  • 如何将节点 sqlite3 与 q (promise) 一起使用

    我正在尝试将 Promise 与 sqlite3 一起使用 这是我的源代码的一部分 this deleteTag function tag project var db this db if project return q nfcall
  • 如何将查询参数添加到守卫中的路由并将其传递给 Angular 4 中的组件?

    我在我的 Angular 4 应用程序中使用路由保护 如果条件满足并返回 true 我想向路由添加一个查询参数 这是我一直在研究的代码 Injectable export class ViewGuardService implements
  • 使用 jquery 更改锚文本和图标

    我有一个隐藏或显示 div 的锚标记 但我无法更改它的文本和图标 如何更改文本和图标标签 因为目前它将图标标签解析为常规文本 锚标记 a class collapse info btn i class icon arrow up icon
  • Chrome 跨域 PATCH 请求不起作用

    我有一个带有 REST Api 的网站 现在我正在创建一个浏览器扩展 它将从某些页面收集数据并将它们发送回 REST Api 因为我希望我的扩展能够与 Firefox 和 Chrome 兼容 并且易于维护 所以我将实际代码作为脚本标记注入到
  • UpdatePanel 启动脚本未执行

    我正在编写一个在 SharePoint 网站中使用的 ASP NET Web 部件 并尝试使用 UpdatePanel 来呈现查询结果 我想使用 JQuery 插件来修改从异步回发返回的表 但我无法让启动脚本在异步更新上执行 我发现这个帖子
  • JavaScript/jQuery - “$ 未定义 - $function()”错误

    我正在尝试运行 JavaScript jQuery 函数并且Firebug http en wikipedia org wiki Firebug 28software 29得到错误 is not defined function JavaS
  • Flask 和 Reactjs 抛出 JSX 转换错误

    我已经开始将 ReactJS 与 Python Flask 后端结合使用 通过 Flask 渲染模板时 我在 Chrome 控制台中收到以下客户端错误 错误 找不到模块 jstransform visitors es6 templates
  • 在 Windows 上静默安装 Qt55 Enterprise

    编辑 在 Qt 支持的帮助下 我已经解决了如何自动化 Qt 企业安装程序的这两个部分 下面是脚本调用 我正在尝试在 Windows 8 1 和 Windows 10 上静默安装 Qt 5 5 1 Enterprise 使用 script 开
  • 如何获取从 Express (Node.js) 中的表单传递的数据

    我想获取使用表单从页面传递的数据 并在重定向的页面中使用该数据 我的客户端有这个表格
  • 如何使 4.X Typescript 项目与旧版本的 Typescript(如 3.X)兼容?

    如何使基于 TS 4 X 构建的软件包与 3 X 兼容 例如 如果我有较新的版本 则使用新功能 否则使用any or unknown或旧版本支持的任何内容 有没有可能使用指令 https www typescriptlang org doc
  • React Router Tabs——保持组件安装

    我使用 React Router 创建了选项卡 每个选项卡都有不同的路线 但是 我想通过保持隐藏选项卡的安装来维护选项卡转换之间的选项卡状态 我该如何实现这一目标 每次路由切换时 React 路由器都会重新安装每个组件 已经有人问过这个问题
  • 如何在react.js中将/n替换为换行符?

    我正在尝试更换每一个 n to a br tag in ReactJS In my note note对象有一个包含多个的字符串 n in it 示例注释 注释 test ntest ntest 我尝试过的ReactJS note note
  • 如何更改数据表中标题单元格的内容?

    我正在使用数据表 http datatables net plugin 在我的可排序列上 我想用按钮替换列文本 但是这样做 oSettings aoColumns i nTh text 我可以检索相应列的文本 但是 oSettings ao

随机推荐

  • 如何使用 tc 和 cgroup 确定数据包的优先级

    我试图对某个进程组生成的数据包进行优先级排序 以便首先选择它们从 PC 传输 我的目标是通过使用 cgroups 和 tc 来做到这一点 但它似乎不起作用 首先我在ubuntu上设置cgroups如下 modprobe cls cgroup
  • Ember.js 如何同时显示两条路由

    我在网站上展示了一个产品 就像这样 products 1 用户可以同时打开一个页面 该页面将显示在产品的顶部 就像覆盖层一样 比产品页面小一点 这样你就可以看到它背后的一些产品 我认为网址应该是 products 1 page 1 这样用户
  • 内核模式下的线程本地存储?

    Windows 确切地说是 Win32 中的内核模式驱动程序是否有等效的线程本地存储 TLS 我试图实现的目标 最终 从我的驱动程序的调度例程中 它可能会调用许多其他函数 可能有一个深层调用堆栈 我想提供一些特定于正在处理的请求的上下文信息
  • Sitecore Analytics 机器人 SessionTimeout 导致会话过早超时

    在我们的一个项目中 我们遇到了随机会话超时问题 通过最近的发现 我注意到 Sitecore Analytics Robots SessionTimeout 可能是导致它的原因 我们注意到 在随机会话超时时 超时值设置为 1 分钟 而不是我们
  • Golang 构建随机约束

    我有两个 go 文件 标头中具有不同的构建约束 常量 生产 go build production staging package main const URL production 常量 staging go build staging
  • `BehaviorSubject` 和 `Sink` 之间有什么关系吗?和`StreamController`?

    通过阅读 abin的回答Flutter中Sink和Stream有什么区别 https stackoverflow com questions 50350235 我已经理解了之间的关系Sink and Stream 除此之外 还有什么关系Be
  • 如何将新数据附加到属性文件中的现有数据?

    我正在使用以下代码将数据写入属性文件 public void WritePropertiesFile String key String data Properties configProperty new Properties confi
  • JavaScript 路由正则表达式

    我需要构建一个路由器 将 REST 请求路由到正确的控制器和操作 这里有一些例子 POST users GET users uid GET users search q lol GET users GET users uid picture
  • 从 PHP Curl 获取 POST Zapier Webhook 响应

    我正在使用 Zapier Webhooks 来集成 Web 门户和 API 门户网站和 API 都是使用 php 开发的 我正在使用curl向Zapier中的catch hook发送请求 发送发布数据 然后在我的 zap 中 第二步获取捕获
  • 使用 msmq 进行异步日志记录

    我需要在我们的应用程序中进行日志记录 并希望尽可能少地保留因日志记录而消耗的时间 我正在考虑使用 MSMQ 以便应用程序登录到 MSMQ 然后我可以将消息从 MSMQ 异步记录到数据库 文件 这个想法在性能方面好吗 或者使用 log4net
  • 如何执行命令提示符并从中获取输出?

    我是Python的新手 我想编写一个Python程序 可以在cmd中执行一些命令并自动从中获取输出 是否可以 我怎样才能做到这一点 你会想要使用subprocess Popen https docs python org 3 4 libra
  • 使用 Jest 模拟的服务会导致“不允许 jest.mock() 的模块工厂引用任何超出范围的变量”错误

    我正在尝试模拟对服务的调用 但我正在努力处理以下消息 模组厂jest mock 不允许引用任何超出范围的变量 我正在使用 babel 和 ES6 语法 笑话和酶 我有一个简单的组件叫做Vocabulary它得到一个列表VocabularyE
  • Lambda 不会触发 SNS 事件。将 AWS lambda 与 SNS 链接起来

    我使用 AWS 将 lambda 链接在一起 方法是让第二个 lambda 订阅第一个 lambda 的 SNS feed 第二个 lambda 没有从第一个 lambda 接收任何内容 并且我在 CloudWatch 或我订阅的个人电子邮
  • 是否可以在 Vista 上构建 exe 并使用 py2exe 在 XP 上部署

    我在 Windows Vista 上使用 python 创建了一些程序 但我想将它部署在 Windows XP 上 是否有必要在Windows XP上进行新的构建 或者是否有可能构建在这两个系统上都可以运行的版本 编辑 编辑2 非常简单的程
  • 在 DataSources.groovy 中扩展多个 grails 数据源?

    您定义的每个环境DataSource groovy扩展基础dataSource定义位于文件根部 环境之外 我有两个特定的配置 需要将它们应用于许多不同的环境 这些环境具有较小的特定于环境的更改 实际上 我需要两个 基本定义 或者某种方式来扩
  • Tortoise-ORM:如何从 tortoise.contrib.postgres.fields 查询 Postgres `ArrayField`

    刚刚创建了一个 PostgresArrayField在 Tortoise ORM 中通过from tortoise contrib postgres fields import ArrayField托管一些我想放置的标签 查看我的 Post
  • .ps1 脚本在 .bat 文件脚本中报告为“缺少结束符 '}'”

    我在将简短的 PowerShell 脚本转换为 cmd exe bat 文件脚本时遇到困难 错误消息 见下文 抱怨 缺少结束 ps1 脚本按预期成功运行 我在赋值语句末尾使用了分号字符 我用脱字符号 转义了垂直线 竖线 字符 我缺少什么 这
  • 片段不会启动

    我有 onclicklistener 可以工作 我正在尝试通过单击列表视图上的按钮启动一个新片段 目前 该片段尚未启动 但是 我们使用的模拟器不会崩溃 因此如果我们正确理解这一点 它就不会连接到新的片段 XML 页面 public void
  • 在 Chart.js 中的条形顶部显示值

    请参考这个小提琴 https jsfiddle net 4mxhogmd 1 https jsfiddle net 4mxhogmd 1 我正在研究 Chart js 如果您在小提琴中看到 您会注意到在某些情况下条形顶部的值未正确显示 超出
  • 我可以在 contentful-client 中使用“useSWR”来创建分页吗?

    我正在尝试使用 nextjs 和 useSWR 挂钩创建分页 这就是我目前的做法 它似乎正在工作 但是我在文档中读到 作为第一个参数传递的密钥应该是一个唯一的字符串 通常是一个 URL 我只是传递索引来获取正确的数据 我的方法会扰乱缓存吗