使用 GraphQL 和 React 构建动态前端应用

简介: 【10月更文挑战第2天】使用 GraphQL 和 React 构建动态前端应用

引言

随着 Web 应用程序变得越来越复杂,传统的 RESTful API 设计模式在某些场景下可能显得有些力不从心。GraphQL 是一种用于 API 的查询语言,它提供了一种更加灵活的方式来请求数据,并且可以减少客户端和服务器之间不必要的数据传输。结合 React 这样的前端框架,我们可以构建出响应迅速且用户友好的应用程序。本文将指导你如何使用 GraphQL 和 React 来构建一个动态前端应用。

技术栈

  • React:一个用于构建用户界面的 JavaScript 库。
  • Apollo Client:一个全面的 GraphQL 客户端,用于管理 GraphQL 数据。
  • Graphcool:一个用于快速搭建 GraphQL API 的平台。(注:Graphcool 项目已经不再维护,此处仅作为示例说明,你可以使用类似的服务如 Hasura)

环境搭建

  1. 安装 Node.js 和 npm

    确保你的计算机上已经安装了 Node.js 和 npm。

  2. 创建 React 项目

    使用 Create React App 快速搭建 React 项目:

    npx create-react-app graphql-react-app
    cd graphql-react-app
    
  3. 安装 Apollo Client

    安装 Apollo Client 相关库:

    npm install @apollo/client graphql
    

创建 GraphQL API

由于 Graphcool 不再维护,这里我们使用 GraphQL 的替代方案 Hasura 来创建一个简单的 API。

  1. 注册 Hasura 账号

    访问 Hasura 官网注册账号,并创建一个新的项目。

  2. 配置数据模型

    在 Hasura 控制台中配置你的数据模型。例如,我们可以创建一个 posts 表格,其中包含 id, title, content 字段。

  3. 生成 GraphQL 查询

    在 Hasura 控制台中,你可以直接通过 SQL 语句插入一些示例数据,并生成相应的 GraphQL 查询语句。

集成 Apollo Client

现在回到 React 项目中,我们将集成 Apollo Client 来与 GraphQL API 交互。

  1. 创建 ApolloProvider

    src/index.js 文件中引入 Apollo Client,并创建 ApolloProvider 组件:

    import React from 'react';
    import ReactDOM from 'react-dom';
    import {
          ApolloClient, InMemoryCache, ApolloProvider } from '@apollo/client';
    import App from './App';
    
    // 创建 Apollo Client 实例
    const client = new ApolloClient({
         
      uri: 'https://your-hasura-endpoint/v1/graphql', // 替换为你的 Hasura GraphQL 端点
      cache: new InMemoryCache(),
    });
    
    ReactDOM.render(
      <React.StrictMode>
        <ApolloProvider client={
         client}>
          <App />
        </ApolloProvider>
      </React.StrictMode>,
      document.getElementById('root')
    );
    
  2. 创建 GraphQL 查询组件

    src/App.js 文件中,创建一个 GraphQL 查询组件来获取数据:

    import React from 'react';
    import {
          useQuery, gql } from '@apollo/client';
    
    const GET_POSTS = gql`
      query GetPosts {
        posts {
          id
          title
          content
        }
      }
    `;
    
    function PostsList() {
         
      const {
          loading, error, data } = useQuery(GET_POSTS);
    
      if (loading) return <p>Loading...</p>;
      if (error) return <p>Error : {
         error.message}</p>;
    
      return (
        <div>
          <h1>Posts</h1>
          <ul>
            {
         data.posts.map(post => (
              <li key={
         post.id}>
                {
         post.title} - {
         post.content}
              </li>
            ))}
          </ul>
        </div>
      );
    }
    
    export default PostsList;
    
  3. 在主应用中使用查询组件

    修改 src/App.js 文件,以包含我们刚刚创建的查询组件:

    import React from 'react';
    import PostsList from './PostsList';
    
    function App() {
         
      return (
        <div className="App">
          <header className="App-header">
            <h1>React & GraphQL Demo</h1>
          </header>
          <PostsList />
        </div>
      );
    }
    
    export default App;
    

运行应用

在终端中运行以下命令来启动 React 开发服务器:

npm start

打开浏览器访问 http://localhost:3000,你应该可以看到从 GraphQL API 获取的帖子列表。

结论

通过这篇文章,我们了解了如何使用 GraphQL 和 React 来构建一个动态的前端应用。GraphQL 允许我们以声明式的方式请求所需的数据,而 React 则帮助我们构建响应式的 UI。这种组合使得开发高性能、数据驱动的应用变得更加容易。尽管这里使用的 Hasura 是一个替代方案,但它展示了如何快速搭建 GraphQL API,并与前端框架集成。在未来,随着 GraphQL 生态系统的不断成熟,我们可以期待更多的工具和服务来简化这一过程。

相关文章
|
7月前
|
前端开发 JavaScript 应用服务中间件
在Docker部署的前端应用中使用动态环境变量
以上步骤展示了如何在 Docker 配置过程中处理并注入环墨遁形成可执行操作流程,并确保最终用户能够无缝地与之交互而无须关心背后复杂性。
358 13
|
12月前
|
移动开发 前端开发 JavaScript
Vue与React两大前端框架的主要差异点
以上就是Vue和React的主要差异点,希望对你有所帮助。在选择使用哪一个框架时,需要根据项目的具体需求和团队的技术栈来决定。
632 83
|
前端开发 安全 开发工具
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
903 90
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
前端开发 算法 NoSQL
前端uin后端php社交软件源码,快速构建属于你的交友平台
这是一款功能全面的社交软件解决方案,覆盖多种场景需求。支持即时通讯(一对一聊天、群聊、文件传输、语音/视频通话)、内容动态(发布、点赞、评论)以及红包模块(接入支付宝、微信等第三方支付)。系统采用前后端分离架构,前端基于 UniApp,后端使用 PHP 框架(如 Laravel/Symfony),配合 MySQL/Redis 和自建 Socket 服务实现高效实时通信。提供用户认证(JWT 集成)、智能匹配算法等功能,助力快速上线,显著节约开发成本。
449 2
前端uin后端php社交软件源码,快速构建属于你的交友平台
|
人工智能 前端开发 JavaScript
AI程序员:通义灵码 2.0应用VScode前端开发深度体验
AI程序员:通义灵码 2.0应用VScode前端开发深度体验,在软件开发领域,人工智能技术的融入正深刻改变着程序员的工作方式。通义灵码 2.0 作为一款先进的 AI 编程助手,与广受欢迎的代码编辑器 Visual Studio Code(VScode)相结合,为前端开发带来了全新的可能性。本文将详细分享通义灵码 2.0 在 VScode 前端开发环境中的深度使用体验。
2170 2
AI程序员:通义灵码 2.0应用VScode前端开发深度体验
|
12月前
|
前端开发 JavaScript NoSQL
使用 Node.js、Express 和 React 构建强大的 API
本文详细介绍如何使用 Node.js、Express 和 React 构建强大且动态的 API。从开发环境搭建到集成 React 前端,再到利用 APIPost 高效测试 API,适合各水平开发者。内容涵盖 Node.js 运行时、Express 框架与 React 库的基础知识及协同工作方式,还涉及数据库连接和前后端数据交互。通过实际代码示例,助你快速上手并优化应用性能。
|
人工智能 前端开发 JavaScript
详解智能编码在前端研发的创新应用
接下来,人与智能体的交互将变得更为紧密,比如 N 年以后是否可以逐渐过渡。这个逐渐过渡的过程实际上是温和的,从依赖人类到依赖超大规模算力的转变,可能会取代我们的一些职责。这不仅仅是简单的叠加关系。对于AI和超大规模算力,这是否意味着我们可以大幅度提升软件质量,是否可以缩短研发周期并提高效率,还有创造出更优质的软件并持续发展,这无疑是肯定的。
857 25
|
监控 前端开发 Java
构建高效Java后端与前端交互的定时任务调度系统
通过以上步骤,我们构建了一个高效的Java后端与前端交互的定时任务调度系统。该系统使用Spring Boot作为后端框架,Quartz作为任务调度器,并通过前端界面实现用户交互。此系统可以应用于各种需要定时任务调度的业务场景,如数据同步、报告生成和系统监控等。
674 9
|
人工智能 前端开发 JavaScript
详解智能编码在前端研发的创新应用 | 领通义灵码蛇年红包封面
详解智能编码在前端研发的创新应用 | 领通义灵码蛇年红包封面
|
6月前
|
缓存 前端开发 JavaScript
React Hooks深度解析与最佳实践:提升函数组件能力的终极指南
🌟蒋星熠Jaxonic,前端探索者。专注React Hooks深度实践,从原理到实战,分享状态管理、性能优化与自定义Hook精髓。助力开发者掌握函数组件的无限可能,共赴技术星辰大海!
React Hooks深度解析与最佳实践:提升函数组件能力的终极指南

热门文章

最新文章

  • 1
    前端如何存储数据:Cookie、LocalStorage 与 SessionStorage 全面解析
    977
  • 2
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(九):强势分析Animation动画各类参数;从播放时间、播放方式、播放次数、播放方向、播放状态等多个方面,完全了解CSS3 Animation
    416
  • 3
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(八):学习transition过渡属性;本文学习property模拟、duration过渡时间指定、delay时间延迟 等多个参数
    326
  • 4
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(七):学习ransform属性;本文学习 rotate旋转、scale缩放、skew扭曲、tanslate移动、matrix矩阵 多个参数
    296
  • 5
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(六):全方面分析css的Flex布局,从纵、横两个坐标开始进行居中、两端等元素分布模式;刨析元素间隔、排序模式等
    415
  • 6
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(五):背景属性;float浮动和position定位;详细分析相对、绝对、固定三种定位方式;使用浮动并清除浮动副作用
    608
  • 7
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(四):元素盒子模型;详细分析边框属性、盒子外边距
    760
  • 8
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(三):元素继承关系、层叠样式规则、字体属性、文本属性;针对字体和文本作样式修改
    212
  • 9
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(二):CSS伪类:UI伪类、结构化伪类;通过伪类获得子元素的第n个元素;创建一个伪元素展示在页面中;获得最后一个元素;处理聚焦元素的样式
    612
  • 10
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(一):CSS发展史;CSS样式表的引入;CSS选择器使用,附带案例介绍
    370