前端开发中,滑动展现日志麻烦?这个组件来帮你

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 前端开发中,滑动展现日志麻烦?这个组件来帮你

640.gif

写在前面


在这个数据无比重要的时代,用户在网页上面的一系列操作,都需要用数据记录下来。在一个网页中,某个元素的点击数,展现数可以说是最基本的指标了。点击数很简单,用户点击的时候,上报一条点击日志即可。但是展现日志,就稍微麻烦一点了。特别是对于必须要上下滑动页面才会出现的元素。滑动展现的场景,在feed流形式的产品上十分常见。所以,一个轻量级的组件,react-scroll-to-show-cb 诞生了。


组件整体介绍


安装:

npm install react-scroll-to-show-cb --save

该组件是基于React开发的,适用于采用react开发的项目。目前主流的react版本都支持。preact也支持,但是需要配置以下的alias :

alias: {
    "react": "preact-compat",
    "react-dom": "preact-compat"
}

使用者只需要将 react组件 或者 html element 直接塞到 react-scroll-to-show-cb 的childern里面去,当对应的元素进入可视区域时,会触发回调函数,并且返回必要的信息。使用者拿到这些信息,就能够上报展现日志了。使用者需要做的,就是完成回调函数里的逻辑即可,十分简单。


组件用法


先看一个例子:

import React from 'react';
import ReactDOM from 'react-dom';
import ReactScrollToShowCb from'react-scroll-to-show-cb';
class App extends React.Component {
    render() {
        return <div>
            <ReactScrollToShowCb 
                onScrollToShow={this.handleShow}
                onInitEnd={this.handleInitEnd}
                once={true} 
                wait={500}>
                <div>1</div>
                <div>2</div>
                <div>3</div>
                <div>4</div>
                <div>5</div>
                <div>6</div>
                <div>7</div>
            </ReactScrollToShowCb>
        </div>
    }
    handleShow(index, dom) {
        console.log(`index: ${index}`);
        console.log('dom:', dom);
    }
    handleInitEnd(instance){
        console.log(instance);
    }
}
ReactDOM.render(<App />, document.body);
  • ReactScrollToShowCb 的 children


支持 Class React Component ,支持 Html Elements, 支持 Functional React Component 。可以为数组,也可以为单个元素。如果为数组,则数组里面的每个元素都必须为同样的类型,即 属于同一类 Class React Component 或者 同一种 Html Elements。


  • async

如果你需要异步生成children,你需要设置async参数为true.

  • onScrollToShow

元素展现时的回调函数,接收 indexdom作为参数。

  • onInitEnd

react-scroll-to-show-cb组件初始化后触发,接收组件实例作为参数。

  • once

多次展现时,是否每次都触发回调函数

  • wait

组件里监听滑动事件时,用了throttle。wait 控制回调函数的触发频率。

  • ReactScrollToShowCb.Update


当ReactScrollToShowCb的children被更新时(新增child或者删除child),需要手动调用Update这个静态方法来更新ReactScrollToShowCb。这样,新增的child也会有滑动展现的逻辑,被删除的child也不会再继续触发滑动展现的逻辑。这对于在feed流中 【下拉刷新】和【上滑加载】的业务逻辑十分有用。Update接受一个参数:ReactScrollToShowCb的实例。这个实例可以通过onInitEnd方法获得。


为什么不支持react函数式组件直接作为children


组件在实现是,用了ref来获取原始DOM。而函数式组件不支持ref。之前考虑在函数式组件外面新增一层html,但是这样侵入性太强,直接破坏了原有的DOM结构,特别是在children是数组的情况下,会导致某些css失效。目前没有很好的方法在父组件中获取函数式组件的原始DOM。遇到函数式组件,可以将 ReactScrollToShowCb 写到函数式组件内部return的jsx里面去。


支持异步生成children、增加child、删除child, 但如果后续修改了children, 那么组件将不会继续工作。


考虑到修改children的情况太多,可以新增,替换,删除等等,如果支持所有情况,需要在组件内处理大量因为children变化而带来的逻辑,这样会使组件的复杂程度大大增加,并且对性能也是一个考验。而本组件的定位就是实现一个简单的滑动展现回调功能,所以react-scroll-to-show-cb只支持了异步生成children。而增加child、删除child需要手动调用Update来更新react-scroll-to-show-cb。 但若有对children的修改,组件将停止正常工作。如果有修改children,然后滑动展现触发回调的需求,可以考虑实例化多个react-scroll-to-show-cb来实现。


写在后面


组件代码地址:这里


之所以开发这个组件,确实是因为之前和如今的工作中确实遇到了各个业务线都需要滑动展现日志的情况,当时都是在业务中直接搞,和业务耦合度较大,不容易复用。完全抽离出来后,就可以直接使用了。本文简单介绍了组件,以及开发过程中的一些思考,符合预期。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
3月前
|
数据采集 前端开发 JavaScript
《花100块做个摸鱼小网站! 》第四篇—前端应用搭建和完成第一个热搜组件
本文档详细介绍了从零开始搭建一个包含前后端交互的热搜展示项目的全过程。通过本教程,读者不仅能学习到完整的项目开发流程,还能掌握爬虫技术和前后端交互的具体实践。适合有一定编程基础并对项目实战感兴趣的开发者参考。
88 1
|
3月前
|
JavaScript 前端开发 开发者
哇塞!Vue.js 与 Web Components 携手,掀起前端组件复用风暴,震撼你的开发世界!
【8月更文挑战第30天】这段内容介绍了Vue.js和Web Components在前端开发中的优势及二者结合的可能性。Vue.js提供高效简洁的组件化开发,单个组件包含模板、脚本和样式,方便构建复杂用户界面。Web Components作为新兴技术标准,利用自定义元素、Shadow DOM等技术创建封装性强的自定义HTML元素,实现跨框架复用。结合二者,不仅增强了Web Components的逻辑和交互功能,还实现了Vue.js组件在不同框架中的复用,提高了开发效率和可维护性。未来前端开发中,这种结合将大有可为。
149 0
|
17天前
|
前端开发 JavaScript 开发者
揭秘前端高手的秘密武器:深度解析递归组件与动态组件的奥妙,让你代码效率翻倍!
【10月更文挑战第23天】在Web开发中,组件化已成为主流。本文深入探讨了递归组件与动态组件的概念、应用及实现方式。递归组件通过在组件内部调用自身,适用于处理层级结构数据,如菜单和树形控件。动态组件则根据数据变化动态切换组件显示,适用于不同业务逻辑下的组件展示。通过示例,展示了这两种组件的实现方法及其在实际开发中的应用价值。
23 1
|
20天前
|
缓存 前端开发 JavaScript
前端serverless探索之组件单独部署时,利用rxjs实现业务状态与vue-react-angular等框架的响应式状态映射
本文深入探讨了如何将RxJS与Vue、React、Angular三大前端框架进行集成,通过抽象出辅助方法`useRx`和`pushPipe`,实现跨框架的状态管理。具体介绍了各框架的响应式机制,展示了如何将RxJS的Observable对象转化为框架的响应式数据,并通过示例代码演示了使用方法。此外,还讨论了全局状态源与WebComponent的部署优化,以及一些实践中的改进点。这些方法不仅简化了异步编程,还提升了代码的可读性和可维护性。
|
28天前
|
前端开发 JavaScript
CSS样式穿透技巧:利用scoped与deep实现前端组件样式隔离与穿透
CSS样式穿透技巧:利用scoped与deep实现前端组件样式隔离与穿透
132 1
|
1月前
|
前端开发 JavaScript 开发者
Web组件:一种新的前端开发范式
【10月更文挑战第9天】Web组件:一种新的前端开发范式
35 2
|
1月前
|
前端开发 JavaScript Go
前端开发趋势:从响应式设计到Web组件的探索
【10月更文挑战第1天】前端开发趋势:从响应式设计到Web组件的探索
36 3
|
2月前
|
SpringCloudAlibaba JavaScript 前端开发
谷粒商城笔记+踩坑(2)——分布式组件、前端基础,nacos+feign+gateway+ES6+vue脚手架
分布式组件、nacos注册配置中心、openfegin远程调用、网关gateway、ES6脚本语言规范、vue、elementUI
谷粒商城笔记+踩坑(2)——分布式组件、前端基础,nacos+feign+gateway+ES6+vue脚手架
|
1月前
|
缓存 Linux 编译器
【C++】CentOS环境搭建-安装log4cplus日志组件包及报错解决方案
通过上述步骤,您应该能够在CentOS环境中成功安装并使用log4cplus日志组件。面对任何安装或使用过程中出现的问题,仔细检查错误信息,对照提供的解决方案进行调整,通常都能找到合适的解决之道。log4cplus的强大功能将为您的项目提供灵活、高效的日志管理方案,助力软件开发与维护。
53 0
|
2月前
|
监控 前端开发 开发者
前端代码规范 - 日志打印规范
前端代码规范 - 日志打印规范