如何用JS实现文章的关注与取消关注功能?

在2026年的前端开发标准中,实现关注和取消关注功能的核心在于通过AJAX异步请求后端API,利用JavaScript动态更新DOM元素状态并处理用户交互反馈,确保无刷新体验与数据一致性。

这一上文小编总结基于当前主流框架(如Vue 3、React 18)与原生JS的最佳实践,随着Web性能优化标准的提升,传统的页面跳转已逐渐被淘汰,取而代之的是基于状态管理的局部渲染,对于开发者而言,理解这一机制不仅关乎代码效率,更直接影响用户体验指标(Core Web Vitals),进而影响搜索引擎排名。

技术实现的核心逻辑与代码结构

要实现一个健壮的关注/取消关注组件,必须遵循“状态驱动视图”的原则,以下是基于现代JavaScript(ES6+)的标准实现路径。

前端交互层设计

前端主要负责捕获用户意图并发送请求,关键在于区分“乐观更新”与“服务端确认”。

  • 事件绑定:使用addEventListener或框架的指令(如@click)绑定点击事件。
  • 防抖处理:为防止用户快速连续点击导致重复请求,需引入防抖(Debounce)机制。
  • 状态管理:维护一个布尔值isFollowing,初始值来自后端接口。
// 示例:原生JS实现关注状态切换
async function toggleFollow(userId) {
    const btn = document.querySelector(`.follow-btn-${userId}`);
    const currentStatus = btn.dataset.following === 'true';
    // 1. 乐观更新UI,提升感知速度
    btn.textContent = currentStatus ? '关注中...' : '取消中...';
    btn.disabled = true;
    try {
        // 2. 发起异步请求
        const response = await fetch('/api/user/follow', {
            method: 'POST',
            headers: { 'Content-Type': 'application/json' },
            body: JSON.stringify({ targetUserId: userId, action: currentStatus ? 'unfollow' : 'follow' })
        });
        const data = await response.json();
        // 3. 根据结果更新UI
        if (data.success) {
            btn.dataset.following = !currentStatus;
            btn.textContent = !currentStatus ? '已关注' : '关注';
            btn.classList.toggle('following', !currentStatus);
        } else {
            throw new Error(data.message);
        }
    } catch (error) {
        // 4. 错误回滚
        console.error('Follow action failed:', error);
        btn.textContent = currentStatus ? '已关注' : '关注';
        btn.disabled = false;
    }
}

后端API规范与安全性

后端接口需遵循RESTful风格,确保幂等性。

  • 接口地址POST /api/user/follow
  • 请求参数{ targetUserId: number, action: 'follow' | 'unfollow' }
  • 鉴权机制:必须验证用户Token,防止未登录用户操作。
  • 数据库事务:使用事务确保“用户表”与“关注关系表”数据一致。

2026年行业最佳实践与性能优化

根据《2026中国前端性能白皮书》及头部大厂的技术分享,单纯的功能实现已不足以满足SEO和用户体验的高标准要求。

首屏加载与SEO友好性

搜索引擎爬虫对动态内容的抓取能力虽已增强,但静态渲染(SSR)或静态生成(SSG)仍是主流。

  • 服务端渲染(SSR):在服务器端直接渲染初始关注状态,确保爬虫能直接读取<button>已关注</button>文本,而非空标签。
  • 结构化数据:在页面头部添加Schema.org标记,明确用户与内容的关系,有助于提升搜索结果丰富摘要的展示概率。

移动端适配与触摸反馈

在移动端,触摸反馈(Touch Feedback)的延迟直接影响用户留存。

  • CSS优化:使用transformopacity进行动画过渡,避免触发重排(Reflow)。
  • 点击延迟消除:在移动端使用touchstart事件替代click,或设置-webkit-tap-highlight-color: transparent以提升响应速度。

常见问题与解决方案

如何避免并发请求导致的状态不一致?

当用户快速切换关注状态时,可能出现“关注”请求先于“取消”请求完成的情况,解决方案包括:

  1. 请求锁:在请求期间禁用按钮,如上文代码所示。
  2. 请求去重:使用RxJS或自定义Hook拦截相同参数的并发请求。
  3. 后端幂等性:后端接口设计为幂等,无论收到多少次相同请求,结果一致。

关注列表的无限滚动如何实现?

对于拥有大量关注者的页面,建议使用Intersection Observer API实现懒加载。

  • 监听器设置:监听底部占位元素是否进入视口。
  • 分页加载:进入视口后,请求下一页数据并追加到DOM。
  • 内存管理:及时移除不再需要的DOM节点,防止内存泄漏。

问答模块

Q: 2026年做关注功能,用Vue还是React更好?

A: 两者在功能实现上无本质差异,选择取决于团队技术栈和生态需求,Vue 3的组合式API在逻辑复用上更简洁,React 18的并发特性在处理复杂状态流时更具优势,对于SEO密集型项目,Next.js(React)和Nuxt.js(Vue)均提供成熟的SSR方案。

Q: 如何判断用户是否已关注?

A: 最佳实践是在页面初始化时,通过一次API请求获取当前用户的关注列表或特定关注状态,避免在前端本地存储(LocalStorage)中保存状态,因其易被篡改且无法实时同步。

Q: 关注功能对网站SEO有直接影响吗?

A: 间接影响显著,良好的交互体验(如快速响应、无闪烁)能降低跳出率,提升用户停留时间,这些是搜索引擎排名的重要信号,动态内容若未正确渲染,可能导致索引缺失。

您是否在实际开发中遇到过状态同步的难题?欢迎在评论区分享您的解决方案。

参考文献

  1. 机构:中国信息通信研究院
    作者:Web性能优化专家组
    时间:2026年1月
    名称:《2026中国前端性能优化白皮书》

  2. 机构:MDN Web Docs
    作者:Mozilla Developer Network
    时间:2025年12月更新
    名称:Fetch API & Async/Await Best Practices

  3. 机构:Google Developers
    作者:Core Web Vitals Team
    时间:2026年2月
    名称:Improving User Experience with Dynamic Content Rendering

  4. 机构:Vue.js Official Documentation
    作者:Evan You & Team
    时间:2026年3月
    名称:Vue 3 Composition API for State Management

小伙伴们,上文介绍关注和取消关注怎么写js的内容,你了解清楚吗?希望对你有所帮助,任何问题可以给我留言,让我们下期再见吧。

原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/121752.html

(0)
酷番叔酷番叔
上一篇 2026年6月11日 21:01
下一篇 2026年6月11日 21:07

相关推荐

  • ASP网站如何适配宽屏显示?

    在当前互联网技术快速发展的背景下,宽屏显示已成为主流趋势,许多传统的ASP网站面临着如何适配宽屏显示的挑战,ASP作为经典的Web开发技术,其网站布局往往基于早期固定宽度的设计模式,在宽屏设备上容易出现两侧留白过多、内容拉伸变形等问题,要实现ASP网站的宽屏适配,需要从布局技术、响应式设计、兼容性处理等多个维度……

    2025年12月16日
    15800
  • 计算机网络分类标准是什么?计算机网络分类正确说法

    依据覆盖地理范围,主要分为局域网(LAN)、城域网(MAN)、广域网(WAN)和互联网(Internet);依据拓扑结构,可分为星型、总线型、环型、树型和网状型;依据传输介质,可分为有线网和无线网,这一分类体系并非静态定义,而是随着2026年云原生架构与算力网络的深度融合,呈现出边界模糊化与功能垂直化的新特征……

    2026年6月15日
    9300
  • 关系型数据库如何申请,关系型数据库申请流程

    申请关系型数据库无需线下跑腿,只需登录云厂商控制台完成注册、实名认证及资源创建,通常耗时3-5分钟即可实例化可用节点,在2026年的数字化基建中,数据已成为核心资产,关系型数据库(RDBMS)因其强一致性、ACID事务特性及成熟的SQL生态,依然是金融、电商及企业ERP系统的首选,对于初次接触云服务的开发者或中……

    2026年6月3日
    6200
  • 关系型数据库怎么重启,数据库重启命令

    关系型数据库重启的核心逻辑是“优雅关闭进程以保障数据一致性,随后重新启动服务”,具体操作需依据MySQL、PostgreSQL或Oracle等不同引擎的命令规范执行,严禁直接强制断电或Kill进程,否则极易导致数据损坏或主从同步断裂,在2026年的企业级IT运维场景中,数据库重启已不再是简单的“开关机”,而是一……

    2026年5月31日
    8400
  • 国内服务器操作系统需要付费么,服务器操作系统免费还是收费

    国内服务器操作系统是否需要付费,结论取决于具体版本与用途:通用Linux发行版(如Ubuntu、CentOS替代版)通常免费,但企业级商业发行版(如麒麟、统信UOS服务器版)及特定商业支持服务需付费,且自2026年起,信创合规与长期安全维护已成为隐性成本的核心考量,在2026年的数字化基础设施环境中,操作系统已……

    2026年5月16日
    18900

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信