如何用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优化:使用transform和opacity进行动画过渡,避免触发重排(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

相关推荐

  • 智能交通论文开题报告探讨哪些关键问题?智能交通论文开题报告怎么写

    智能交通论文开题报告的核心在于聚焦“车路云一体化”架构下的数据融合与算法优化,建议以2026年L4级自动驾驶规模化落地为背景,选取具体城市路段或高速场景,通过对比传统信号控制与AI自适应控制的效率差异,确立以“降低拥堵指数”和“提升通行安全”为量化指标的实证研究路径,研究背景与选题意义:从概念到落地的跨越行业痛……

    2026年6月30日
    10800
  • 国际会员业务中台软件好用吗?国际会员业务中台软件

    国际会员业务中台软件通过构建统一的数据底座与灵活的规则引擎,能帮助企业实现全球用户身份的一体化认证、权益的自动化分发及合规数据的本地化存储,是跨国企业突破地域限制、降低IT运维成本并提升用户留存率的核心基础设施,为什么跨国企业急需构建会员业务中台?在2026年的全球化商业环境中,单纯依靠前端APP或小程序已无法……

    2026年5月12日
    13800
  • 网络刑法为何界限模糊?法律如何平衡自由与安全?刑法界限模糊怎么界定

    触犯网络刑法的核心红线在于非法获取数据、破坏系统功能及利用网络实施诈骗,2026年司法实践已确立“技术中立不免责”原则,任何绕过安全防护或非法交易数据的行为均面临刑事追责,网络犯罪的法律界定与核心罪名解析在数字化生存成为常态的2026年,网络空间不再是法外之地,刑法修正案及相关司法解释对网络犯罪的界定更加精细……

    2026年6月22日
    11600
  • Android拍照存储文件夹在哪里?,安卓手机照片默认保存位置是哪里?

    Android拍照存储文件夹默认位于DCIM/Camera目录,但实际路径因品牌、系统版本和用户设置存在显著差异,正确掌握其结构与变更逻辑,是解决照片丢失、存储优化等问题的关键,原生Android拍照存储路径机制默认路径与文件命名规则在原生Android系统(AOSP)中,相机应用拍摄的照片默认存储在内部共享存……

    2026年7月20日
    1.1K00
  • 国内无线监控云存储怎么收费,云存储收费多少钱

    国内无线监控云存储目前主流采用“订阅制”收费,基础7天循环存储月费约10-30元,30天全量存储月费约30-80元,具体价格取决于品牌、分辨率及是否包含AI智能分析功能,市场主流收费模式深度解析在2026年的智能家居市场,云存储已从早期的“按天购买”全面转向“周期性订阅”,这种模式不仅降低了用户的使用门槛,也通……

    2026年5月21日
    1.6K00

发表回复

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

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信