【前端】graphql 数据接入优化案例

简介: 【前端】graphql 数据接入优化案例

一、案例背景


七镜在基于react编写页面时,发现一段每个页面都重复的graphql相关代码,代码如下:

// 标记1
    const [dataNews, setDataNews] = useState<TGqlDimensionNews>({
        code: 0, content: [], count: 0, msg: {fail: "", success: ""}
    })
// 标记2
    const [condNews, setCondNews] = useState<TCondType>({
        page_after: 0,
        page_size: 10,
        order_by: "created_at",
        sort_by: "desc",
        detail: {},
        keyword: {
        },
        table_name: "dimension_news",
    })
// 标记3
    //useGraphql
    const [getDimensionNews, {data: dataDimensionNews, error}] = useLazyQuery(QUERY_DIMENSION_NEWS)
// 标记4
    // useEffect:
    useEffect(() => {
        getDimensionNews({
            variables: {
                from_id: auth.data.base.id,
                from_nickname: auth.data.account,
                content: JSON.stringify(condNews)
            }
        })
            .then(resp => {
                let tmpData = {...resp.data.dimensionNews} as TGqlDimensionNews
                // console.log("result:", tmpData.content[0].base_dimension.content)
                if (tmpData.code === 200) {
                    setDataNews(tmpData)
                }
            })
            .catch(e => {
                console.log(e)
            })
    }, [condNews])


  • 标记1:定义服务端数据接收过来的结构体
  • 标记2:定义服务端数据获取的过滤条件
  • 标记3:定义graphql数据获取的函数入口
  • 标记4:通过graphql数据获取函数接收服务端数据,并存入保存页面数据的地方(dataNews)

我们知道,写代码的时候,面对第一个新需求,快速实现一段代码;面对第二个差不多的需求,针对刚刚那段代码,复制粘贴并做一些小小的修改;面对第三个差不多的需求,应当重构前面的代码。



二、优化方案

首先,技术实现肯定是基于 react hooks。详细代码如下:

import React, {useState, useEffect, useContext} from "react";
import {DocumentNode, useLazyQuery} from "@apollo/react-hooks";
import {
    TCondType,
    TResponseCommon
} from "../../register-center/graphql/graphql-types/graphql-types";
import {ContextAuth} from "../../register-center/context/auth/context-auth";
export interface useGraphqlGetProps {
    cond: TCondType, // 接口参数
    gql_schema_query: DocumentNode, // Graphql schema
    gql_data_query_name: string, // 查询的表名
    setData: React.Dispatch<React.SetStateAction<TResponseCommon>> // 设置查询结果
}
function useGraphqlQuery(props: useGraphqlGetProps): [TCondType, React.Dispatch<React.SetStateAction<TCondType>>] {
    const [auth, setAuth] = useContext(ContextAuth) // 接口参数中的用户名和用户昵称的来源
    const [cond, setCond] = useState<TCondType>(props.cond)
    //useGraphql
    const [getData, {error}] = useLazyQuery(props.gql_schema_query)
    // useEffect
    useEffect(() => {
        if (!cond.table_name) {
            console.error("please replace cond.table_name")
            return
        }
        getData({
            variables: {
                from_id: auth.data.base.id,
                from_nickname: auth.data.account,
                content: JSON.stringify(cond)
            }
        })
            .then(resp => {
                let tmpData = {...resp.data[props.gql_data_query_name]}
                // console.log("result:", tmpData.content[0].base_dimension.content)
                if (tmpData.code === 200) {
                    props.setData(tmpData)
                }
            })
            .catch(e => {
                console.error(e)
            })
    }, [cond])
    return [cond, setCond]
}
export default useGraphqlQuery



实现思路:

  1. 该hook的初始化依赖于传入的【接口参数】、【graphql schema】、【查询的表名】、【设置查询结果的函数】
  2. 该hook中的实现逻辑与之前代码一致。
  3. 替换之前的代码中与传入参数一致的地方。




三、优化结果

优化后计入数据的代码:

    const [data, setData] = useState<TGqlDimensionApplicationCase>(initResponseCommon)
    const [cond, setCond] = useGraphqlQuery({
        cond: {
            ...initCond,
            table_name: "dimension_application_case",
        },
        gql_schema_query: QUERY_DIMENSION_APPLICATION_CASE,
        gql_data_query_name: "dimensionApplicationCase",
        setData: setData
    })

从优化前后的代码行数,可以看到代码量已经大大减少了,封装完毕。

目录
打赏
0
0
0
0
43
分享
相关文章
如何优化前端性能以提高加载速度
前端性能优化对提升网站加载速度至关重要,直接影响用户体验、SEO排名和转化率。本文介绍了优化前端加载速度的关键技巧,包括最小化HTTP请求、使用CDN、优化图片、利用浏览器缓存、压缩文件和实现懒加载。通过这些方法,可以显著减少页面加载时间,提高网站的整体性能和用户满意度。
前端 CSS 优化:提升页面美学与性能
前端CSS优化旨在提升页面美学与性能。通过简化选择器(如避免复杂后代选择器、减少通用选择器使用)、合并样式表、合理组织媒体查询,可减少浏览器计算成本和HTTP请求。利用硬件加速和优化动画帧率,确保动画流畅。定期清理冗余代码并使用缩写属性,进一步精简代码。这些策略不仅加快页面加载和渲染速度,还提升了视觉效果,为用户带来更优质的浏览体验。
利用代码分割优化前端性能:策略与实践
在现代Web开发中,代码分割是提升页面加载性能的有效手段。本文介绍代码分割的概念、重要性及其实现策略,包括动态导入、路由分割等方法,并探讨在React、Vue、Angular等前端框架中的具体应用。
Vue 性能革命:揭秘前端优化的终极技巧;Vue优化技巧,解决Vue项目卡顿问题
Vue在处理少量数据和有限dom的情况下技术已经非常成熟了,但现在随着AI时代的到来,海量数据场景会越来越多,Vue优化技巧也是必备技能。 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
婚恋交友系统平台 相亲交友平台系统 婚恋交友系统APP 婚恋系统源码 婚恋交友平台开发流程 婚恋交友系统架构设计 婚恋交友系统前端/后端开发 婚恋交友系统匹配推荐算法优化
婚恋交友系统平台通过线上互动帮助单身男女找到合适伴侣,提供用户注册、个人资料填写、匹配推荐、实时聊天、社区互动等功能。开发流程包括需求分析、技术选型、系统架构设计、功能实现、测试优化和上线运维。匹配推荐算法优化是核心,通过用户行为数据分析和机器学习提高匹配准确性。
382 4
2024年前端性能优化新策略
2024年前端性能优化策略涵盖代码分割与环境变量管理。代码分割通过动态导入和按需加载CSS减少初始加载时间;环境变量管理则确保敏感信息安全,简化多环境配置。结合最新工具和技术,可大幅提升Web应用性能与用户体验。
探索前端性能优化:关键策略与代码实例
本文深入探讨前端性能优化的关键策略,结合实际代码示例,帮助开发者提升网页加载速度和用户体验,涵盖资源压缩、懒加载、缓存机制等技术。
前端开发人员SEO优化技术方案
不同的搜索引擎提供了服务后台常见功能来优化网站搜索
80 2
如何优化前端框架的数据驱动方式以提高性能?
综上所述,通过多种手段的综合运用,可以有效地优化前端框架的数据驱动方式,提高应用的性能,为用户带来更好的体验。同时,随着技术的不断发展和进步,我们需要不断探索和创新,以找到更适合的优化方法和策略。
前端性能优化实战:从代码到部署的全面策略
前端性能优化实战:从代码到部署的全面策略
84 1