首页 > 其他分享 >完整的 redux 工具包(第 4 部分)

完整的 redux 工具包(第 4 部分)

时间:2024-09-26 19:52:25浏览次数:8  
标签:gt const posts 工具包 查询 完整 rtk post redux

第 4 部分:rtk 查询中的高级主题。 本部分将重点介绍 rtk 查询中的高级功能和用例,包括自定义查询、处理身份验证、乐观更新和性能优化。 第 4 部分:rtk 查询中的高级主题 1. 高级rtk查询概念介绍在上一部分中,我们介绍了使用 rtk 查询来获取和变异数据的基础知识。现在,我们将深入研究更高级的功能,使 rtk 查询变得更加强大。这些功能允许您自定义查询、管理身份验证、优化性能并处理乐观更新,以获得更流畅的用户体验。 2. 自定义basequery进行身份验证使用需要身份验证的 api 时,您需要自定义 basequery 以包含 jwt 令牌或 api 密钥等身份验证标头。 第 1 步:创建自定义基本查询您可以创建一个自定义的 basequery 函数,为每个请求添加授权标头。// src/app/custombasequery.jsimport { fetchbasequery } from '@reduxjs/toolkit/query/react';const custombasequery = fetchbasequery({ baseurl: 'https://jsonplaceholder.typicode.com/', prepareheaders: (headers, { getstate }) =&gt; { const token = getstate().auth.token; // assuming auth slice has token if (token) { headers.set('authorization', `bearer ${token}`); } return headers; },});export default custombasequery;登录后复制说明:prepareheaders:此函数允许您为每个请求自定义标头。它从 redux 存储中检索令牌并将其附加到 authorization 标头。 第2步:在createapi中使用自定义basequery修改 postsapi.js 文件以使用自定义基本查询:// src/features/posts/postsapi.jsimport { createapi } from '@reduxjs/toolkit/query/react';import custombasequery from '../../app/custombasequery';export const postsapi = createapi({ reducerpath: 'postsapi', basequery: custombasequery, // use the custom base query here tagtypes: ['post'], endpoints: (builder) =&gt; ({ fetchposts: builder.query({ query: () =&gt; 'posts', providestags: (result) =&gt; result ? result.map(({ id }) =&gt; ({ type: 'post', id })) : ['post'], }), addpost: builder.mutation({ query: (newpost) =&gt; ({ url: 'posts', method: 'post', body: newpost, }), invalidatestags: ['post'], }), }),});export const { usefetchpostsquery, useaddpostmutation } = postsapi;登录后复制 3. 使用 rtk 查询进行乐观更新乐观更新允许您在服务器确认突变之前立即更新 ui,提供更流畅的用户体验。如果服务器返回错误,ui 可以恢复到之前的状态。 第 1 步:在突变中实施乐观更新您可以使用 rtk query 提供的 onquerystarted 生命周期方法来实现乐观更新。// src/features/posts/postsapi.jsaddpost: builder.mutation({ query: (newpost) =&gt; ({ url: 'posts', method: 'post', body: newpost, }), invalidatestags: ['post'], onquerystarted: async (newpost, { dispatch, queryfulfilled }) =&gt; { // optimistic update: immediately add the new post to the cache const patchresult = dispatch( postsapi.util.updatequerydata('fetchposts', undefined, (draftposts) =&gt; { draftposts.push({ id: date.now(), ...newpost }); // fake id for optimistic update }) ); try { await queryfulfilled; // await server response } catch { patchresult.undo(); // revert if the mutation fails } },}),登录后复制说明:onquerystarted:当突变开始时会触发此生命周期方法。它提供了dispatch和queryfulfilled参数来管理缓存更新。postsapi.util.updatequerydata:这个实用函数允许您乐观地更新缓存数据。patchresult.undo():如果服务器返回错误,则恢复乐观更新。 4. 处理相关查询有时,您可能需要执行相关查询,其中一个查询依赖于另一个查询的结果。 rtk 查询提供了skip 参数来控制查询何时执行。 示例:根据所选帖子 id 获取帖子详细信息// src/features/posts/postdetails.jsimport react from 'react';import { usefetchpostquery } from './postsapi';const postdetails = ({ postid }) =&gt; { const { data: post, error, isloading } = usefetchpostquery(postid, { skip: !postid }); if (!postid) return <p>select a post to view details.</p>; if (isloading) return <p>loading...</p>; if (error) return <p>error loading post details.</p>; return ( <div> <h3>{post.title}</h3> <p>{post.body}</p> </div> );};export default postdetails;登录后复制说明:usefetchpostquery:以 postid 作为参数的查询挂钩。如果未提供 postid,则使用 {skip: !postid } 跳过查询。 5. 使用 rtk 查询轮询和实时数据rtk 查询支持轮询,以指定的时间间隔保持数据最新。这对于实时数据同步很有用。 第 1 步:在查询中使用轮询您可以使用 pollinginterval 选项为任何查询启用轮询。// src/features/posts/postslist.jsimport react from 'react';import { usefetchpostsquery } from './postsapi';const postslist = () =&gt; { const { data: posts, error, isloading } = usefetchpostsquery(undefined, { pollinginterval: 30000, // poll every 30 seconds }); if (isloading) return <p>loading...</p>; if (error) return <p>an error occurred: {error.message}</p>; return ( <section><h2>posts</h2> <ul> {posts.map((post) =&gt; ( <li key="{post.id}">{post.title}</li> ))} </ul></section> );};export default postslist;登录后复制说明:pollinginterval:此选项指定查询应轮询服务器以获取新数据的时间间隔(以毫秒为单位)。 6. 使用 selectfromresult 优化性能rtk 查询提供 selectfromresult 选项以实现高级性能优化,允许您从查询结果中选择特定数据。 第 1 步:使用 selectfromresult 优化重新渲染当只需要查询结果的子集时,可以使用 selectfromresult 选项来防止不必要的重新渲染。// src/features/posts/PostTitleList.jsimport React from 'react';import { useFetchPostsQuery } from './postsApi';const PostTitleList = () =&gt; { const { data: posts } = useFetchPostsQuery(undefined, { selectFromResult: ({ data }) =&gt; ({ titles: data?.map((post) =&gt; post.title) }), }); return ( <section><h2>Post Titles</h2> <ul> {posts?.map((title, index) =&gt; ( <li key="{index}">{title}</li> ))} </ul></section> );};export default PostTitleList;登录后复制说明:selectfromresult:此选项允许您仅从获取的帖子中选择标题,防止查询结果中的其他数据发生更改时不必要的重新渲染。 7. 结论和后续步骤在这一部分中,我们探讨了 rtk 查询中的高级主题,例如自定义用于身份验证的 basequery、处理乐观更新、管理依赖查询、使用轮询进行实时数据同步以及使用 selectfromresult 优化性能。 rtk query 丰富的功能集使其成为现代 redux 应用程序中处理数据获取和缓存的强大工具。在下一部分中,我们将讨论redux toolkit 和 rtk 查询的测试策略,涵盖单元测试、集成测试以及确保代码健壮和可维护的最佳实践。敬请关注第 5 部分:redux 工具包和 rtk 查询的测试策略! 以上就是完整的 redux 工具包(第 4 部分)的详细内容,更多请关注我的其它相关文章!

标签:gt,const,posts,工具包,查询,完整,rtk,post,redux
From: https://www.cnblogs.com/aow054/p/18434179

相关文章

  • mysql表结构的完整描述(详细教程)
    mysql表结构的完整描述图示---用于显示表的结构,涵盖了每个字段的属性(这里描述5个)。一、desc(describe)命令的输出标签1、Field(字段名)描述:列的名称。字段名用于标识表中的数据。用途:字段名是访问表数据的关键,操作SQL查询时引用字段名来选择、更新或删除数据。命名规......
  • C#邮件发送:实现自动化邮件通知完整指南!
    C#邮件发送性能怎么优化?使用C#发送邮件的设置步骤?无论是用于客户服务、内部沟通还是项目管理,自动化邮件通知都能显著提高效率和响应速度。AokSend将详细介绍如何使用C#邮件发送功能来实现自动化邮件通知系统。C#邮件发送:配置环境需要确保开发环境已经正确配置。这包括安装.......
  • 一键去水印小程序源码系统 下载无水印的高清图片 带完整的安装代码包以及搭建部署教程
    系统概述一键去水印小程序源码系统是一款专为图片去水印设计的软件开发包(SDK),它集成了先进的图像处理技术和智能识别算法,能够自动识别并去除图片中的水印,同时保持图片的高清画质不受损。该系统支持多种图片格式,包括但不限于JPEG、PNG、GIF等,广泛适用于电商、设计、教育、自媒体......
  • 家庭医生上门服务小程序源码系统 带完整的安装代码包以及搭建部署教程
    系统概述家庭医生上门服务小程序源码系统是一款专为医疗机构、健康服务平台及有意愿涉足健康服务领域的创业者设计的一站式解决方案。该系统集成了预约挂号、在线问诊、健康档案管理、药品配送、健康资讯推送等多种功能于一体,旨在通过移动互联网技术,打破传统医疗服务的时空限......
  • RC522 NFC Reader,解决无法读取完整内存数据【Arduino IDE】
    目录一、前言二、项目概要三、实验测试(一)读取uid(二)读取内存与写入内存回到开头提到的两个问题:第一种情况读不全数据,//TrythempagesoftheoriginalUltralight.UltralightChasmorepages.第二种情况:直接无法读出数据,有时候甚至是一开始读得出,后来突然又读不出了......
  • 自适应企业网站建站系统源码 带完整的安装代码包以及搭建部署教程
    系统概述传统的建站方式往往需要耗费大量的时间和资源,而且对于非专业人士来说,操作难度较大。为了满足企业快速建站的需求,自适应企业网站建站系统源码应运而生。该源码的开发团队致力于打造一款功能齐全、易于操作的建站系统,让企业能够在短时间内搭建出符合自身需求的网站,提升......
  • 【运维监控】Prometheus+grafana+blackbox_exporter+alertmanager监控业务接口异常预
    运维监控系列文章入口:【运维监控】系列文章汇总索引文章目录一、prometheus部署二、grafana部署三、blackbox_exporter部署1、下载2、解压3、启动4、验证四、prometheus集成blackbox_exporter1、添加prometheus监控规则2、添加prometheus的预警规则3、添加prometheus......
  • OPENLDAP部署完整版(Linux)附一键式脚本
    (一)环境信息1,系统环境2,域信息(本章节使用)(二)应用部署1,ladp部署1、yum方式安装OpenLDAP服务2、拷贝数据库配置配置文件,并启动服务3、slappasswd生成OpenLDAP管理员密码4、导入基本的模式5、在OpenLDAPDB上配置域信息2,安装phpLDAPadmin实现通过Web管理LDAP服务1,部署httpd2,部署php应......
  • 2025秋招LLM大模型多模态面试题(八)- langchain完整面试题
    目录什么是LangChainLangChain包含哪些核心模块模型输入/输出(ModelI/O)组件管理数据处理链式组合记忆与上下文管理外部集成一些核心概念什么是LangChainAgent?什么是LangChainmodel?LangChain包含哪些特点?LangChain如何使用?LangChain如何调用......
  • 【Unity精品源码】JU TPS 3 – 完整的第三人称射击游戏模板
    ......