在 React 中如何优雅的运行用户界面组件

React 在哪里运行用户界面组件

React允许开发者将复杂的界面拆分为更小、可管理的组件,就像用乐高积木构建东西一样。这些组件可以轻松地组合在一起,创建复杂而动态的用户界面。然而,这些组件在何处执行的选择对用户体验和应用性能有着重要的影响。

一方面,在用户设备上执行组件,也称为客户端方法,提供了即时的响应性和交互性。这对于诸如交互按钮或滑块之类的元素至关重要,用户期望得到即时的反馈。在本地运行这些组件可以消除网络延迟,确保无缝的用户体验。这种方法符合用户界面是客户端设备当前状态的直接函数的概念。

另一方面,有一个强有力的论点支持在服务器上运行组件,特别是对于需要访问大型数据集或进行复杂处理的应用程序的部分。例如,显示博客文章预览的组件,其中包括单词计数和其他元信息,从服务器端执行中受益。这种设置允许组件直接在服务器上访问和处理数据,而不会通过大量数据传输来过度占用客户端设备。在这种情况下,界面被视为服务器上数据的函数。

实现交互性和性能的最佳融合

挑战在于调和这两种方法。交互式组件需要在客户端执行以获得实时反馈,而数据密集型组件需要在服务器端执行以提高效率。这种二元对立为希望在其应用程序中优化交互性和数据处理的开发人员带来了困境。

本质上,在寻找一种平衡的方法,充分利用客户端和服务器端执行的优势。目标是创建一个既响应又高效的用户界面,而不会影响用户体验或过度占用客户端设备。因此,鼓励开发人员在设计应用程序时考虑这两种范式,以实现交互性和性能的最佳融合。

那应该如何实现呢?

像服务器组件和部分预渲染这样的功能如何协助?

Next.JS/服务器组件/部分预渲染

React 中的服务器组件引入了一种范式,其中某些组件直接在服务器上呈现,而不是在客户端上。这种方法显著提高了性能和效率,因为它减少了传输到客户端的代码和数据量。通过在服务器上执行逻辑密集型组件,它最小化了客户端负载,导致页面加载速度更快,用户体验更好。

React 的发展方向

React核心团队推荐使用像Next.JS这样的框架,因为它们利用了服务器组件,并提供了一个集成环境,简化了处理服务器端渲染的过程。真诚地建议阅读Next.JS团队的组合模式,以了解如何使用服务器和客户端组件。

Next.JS中的部分预渲染概念凭借其创新性方法脱颖而出,将增量静态再生(ISR)和服务器端处理(SSR)的优势相结合。该方法着重于通过在构建时预渲染具有动态内容的页面,并根据需要进行增量更新,从而优化Web应用程序的性能。

部分预渲染的核心是能够选择性地预渲染网页的特定部分。开发人员通过决定页面的哪些部分应该静态生成,哪些部分应该保持动态,来更好地控制优化过程。React的Concurrent APISuspense特性在此发挥了作用,它允许在必要数据可用之前暂时挂起渲染。该方法的一个关键方面是使用回退UI,通常是一个加载器,在获取数据时显示,从而保持流畅的用户体验。

Next.JS中实现部分预渲染是一个简单的过程。通过使用Suspense组件包装执行异步操作的应用程序部分,开发人员可以向Next.JS指示页面的哪些部分需要动态渲染。其中一个示例是在异步获取数据的组件中,可以使用Suspense组件指示在数据准备就绪之前需要暂停。

设置包括升级到Next.js的最新Canary版本,并配置next.config.js文件以启用部分预渲染。这种设置允许进行高效的加载过程,首先渲染静态内容,包括回退UI,然后随着动态内容的准备完成,逐步进行动态内容的渲染。

js 复制代码
import React, { Suspense } from 'react';  
  
function LoadingTweets() {  
    // Define the loading shimmer effect for tweets  
    const shimmer = `relative overflow-hidden before:absolute before:inset-0 before:-translate-x-full before:animate-[shimmer_1.5s_infinite] before:bg-gradient-to-r before:from-transparent before:via-white/10 before:to-transparent`;  
    return (  
        <div className="space-y-4 min-h-screen w-full mt-20">  
            {[...Array(5)].map((_, index) => (  
                <div key={index} className={`h-[100px] rounded-lg bg-gray-900 ${shimmer}`} />  
            ))}  
        </div>  
    );  
}  
  
function Tweets() {  
    const data = await fetch(API_URL, {  
    cache: 'no-store',  
    })  
    const tweets = await data.json()  
  
    return (  
        <div>  
            {tweets.map(tweet => (  
                <div key={tweet.id} className="mb-4 p-4 border-b border-gray-200">  
                <h4 className="font-bold">{tweet.title}</h4>  
                <p>{tweet.body}</p>  
                </div>  
            ))}  
        </div>  
    );  
}  
  
export default function Home() {  
    return (  
        <div className="container mx-auto p-4">  
            <h1 className="text-3xl font-bold mb-4">Twitter Feed</h1>  
            <Suspense fallback={<LoadingTweets />}>  
            <Tweets />  
            </Suspense>  
        </div>  
    );  
}

React和诸如Next.JSRemix之类的框架正在彻底改变我们构建Web应用程序的方式。平衡客户端和服务器端执行的创新,例如服务器组件和部分预渲染,通过更快的加载和更具响应性的界面增强了用户体验。这种演变强调了适应新方法的重要性,确保应用程序高效且用户友好。作为开发者,在不断发展的Web领域保持领先地位,掌握这些变化至关重要。

点赞收藏支持、手留余香、与有荣焉,动动你发财的小手哟,感谢各位大佬能留下您的足迹。

往期热门精彩推荐

面试相关热门推荐

前端万字面经------基础篇

前端万字面积------进阶篇

简述 pt、rpx、px、em、rem、%、vh、vw的区别

实战开发相关推荐

前端常用的几种加密方法

探索Web Worker在Web开发中的应用

不懂 seo 优化?一篇文章帮你了解如何去做 seo 优化

【实战篇】微信小程序开发指南和优化实践

前端性能优化实战

聊聊让人头疼的正则表达式

获取文件blob流地址实现下载功能

Vue 虚拟 DOM 搞不懂?这篇文章帮你彻底搞定虚拟 DOM

移动端相关推荐

移动端横竖屏适配与刘海适配

移动端常见问题汇总

聊一聊移动端适配

Git 相关推荐

通俗易懂的 Git 入门

git 实现自动推送

更多精彩详见:个人主页

相关推荐
温吞-ing几秒前
第十章JavaScript的应用
开发语言·javascript·ecmascript
彪8251 分钟前
第十章 JavaScript的应用 习题
javascript·css·ecmascript·html5
jessezappy18 分钟前
jQuery-Word-Export 使用记录及完整修正文件下载 jquery.wordexport.js
前端·word·jquery·filesaver·word-export
旧林8431 小时前
第八章 利用CSS制作导航菜单
前端·css
yngsqq1 小时前
c#使用高版本8.0步骤
java·前端·c#
Myli_ing2 小时前
考研倒计时-配色+1
前端·javascript·考研
余道各努力,千里自同风2 小时前
前端 vue 如何区分开发环境
前端·javascript·vue.js
PandaCave2 小时前
vue工程运行、构建、引用环境参数学习记录
javascript·vue.js·学习
软件小伟2 小时前
Vue3+element-plus 实现中英文切换(Vue-i18n组件的使用)
前端·javascript·vue.js
醉の虾2 小时前
Vue3 使用v-for 渲染列表数据后更新
前端·javascript·vue.js