用 React 整合 LogEntries JavaScript 库

【编者按】本文作者为 David Posin,主要介绍 React 与 LogEntries 间的相互操作。本文系国内 ITOM 管理平台 OneAPM 编译呈现。

众所周知,React.js已经被证实是众多JavaScript架构中的有力竞争者。按理说,它已经成为web开发人员应当考虑的,在当前及未来项目中使用的少数项目库之一。而了解它如何与技术栈中的其他库相集成,是非常重要的一环。如果你目前正在使用LogEntries,或者考虑使用LogEntries,那懂得如何集成React.js和LogEntries就非常关键。本文将阐明他们间的互操作性。

文中引用的代码

本文所引用的代码都可以在GutHub上查看。

构建和编译

写一个React应用程序可能很简单,但对新手来说,把它加载到Web浏览器中往往很艰难。除了一些特定情况外,在加载前,我们都需要使用构建工具对React进行预处理,例如grunt、gulp或者webpack。本文的示例使用了webpack。Webpack运行时使用的配置文件也如示例中所示。

Webpack内部使用了Node.js,所以我们可以访问Node的标准模块。第一行加载的模块,即Path,是用来模糊不同平台的路径差异的。使用了Path模块,就可以在任何Node支持的文件系统(Windows、Unix、Mac)中进行构建。

该配置文件通知webpack应该从哪里开始构建应用程序,以及把结果输出到哪里。Entry属性告诉webpack应用程序从哪里开始。在本例子中,应用程序在app文件夹下初始化,并从一个index模块开始(.js扩展名是默认的)。然后它把结果输出到app文件夹下的bundle.js文件中。

配置文件的这一部分处理从哪里开始和在哪里结束的问题。然而,我们的代码也需要在构建过程中进行编译。这就要加载一个编译模块。Babel模块加载器就很适合用来做这个。

笔者认为Babel是用于处理React的最简单且常见的工具。Babel把你的JavaScript脚本编译成能被大多数浏览器支持的版本,即便不是所有的浏览器。通过配置Babel,我们可以用它编译React代码,也可以编译用更新的JavaScript类语法写成的代码。

我们在配置文件中增改了如下模块加载代码:

我们为编译设置了如下属性:

  • test属性通知Babel运行任何匹配测试标准的内容。根据正则表达式,任何以.js或.jsx作为扩展名的文件,都会进行处理。
  • include阵列通知Babel在哪些文件夹下递归搜索文件。在本文的例子中,即为app/js文件夹中的所有文件以及app/index.jsx文件。
  • loader是加载器模块的名字。
  • query中设置了es2015和React预置程序包的模块具体设置。

以上就是本示例的构建和编译过程。现在,我们来看一看代码。

代码

Indexes

如果一切构建正常的话,app/index.html在浏览器中的打开结果,就与上图类似。页面中的文本提醒用户在app.jsx代码中更新令牌,并且在点击一个链接后检查其LogEntries账户。单击链接将发送相应类型的日志条目到Logentries.com。LogEntries标志下的一切都是由React插入的。我们来看一下这一页面是怎样构建的。

自然起点就在index.html页面中。对大多数React应用来说,这一页面非常简单和单调。唯一值得注意的是id为“app”的div标签。这是React本身的插入点。

React应用程序从app/index.jsx开始:

React应用程序的顶层设置了文本及其初始渲染。页面会加载react、react-dom和App.。React-dom是用来渲染网页的库。App是我们在页面中看到的组件。

渲染方法会渲染“”。这个HTML标记对应于一开始用“const App=”行导入的模块的名字。作为一个HTML标记,“App”通知编译器把App模块加载到这个程序空间。

Index页面使用了React的JSX语法。JSX旨在通过语义HTML格式化React代码。语义HTML用标签来描述其功能及所指。使用App作为标签是符合语义的,因为它告诉开发者这个标签的用途。在本例中,它就是用来加载App模块的。

App.jsx

大多数用例程序都存在于app/js文件夹下的App.jsx文件中。这个程序会加载文本、链接以及建立链接点击的功能。顶层部分会将之后应用中需要用到的模块和变量实例化。

第一个模块,React,是唯一一个被调出却未以明确方式使用的模块。这是个特殊情况。React是编译器顶层所需要的。编译器需要参考React,才能在渲染功能中正确地解析HTML标记。

下一个调用的是Logger。LogEntries代码部分就在Logger模块里。该模块是Logentries对象的一个简单接口。最后四个引用,设置了我们会在余下程序里当作常用使用的变量。

渲染功能大部分是标准的HTML和React。对React新用户来说,唯一不同的可能是style标签。React编译器需要把style标签解析为JavaScript文字,因此属性会被{{}}框起来。第一组大括号作为一对例外符号,告诉编译器把其中内容处理成JavaScript。第二组大括号表示其中内容是JavaScript文字。这两对花括号中的所有内容都要使用驼峰式大小写(即首字母大写)才能通过JavaScript格式编译。

锚标记是设置功能的地方:

每个锚都使用onClick处理器定义click事件。他们援引在类的底部定义的sendLog函数。大括号告诉编译器,里面的内容是JavaScript代码。每个处理程序的内容都是类,所以这会指向被实例化的App对象。绑定它们可以确保被激活的功能对应于合适的链接(“error”、“warn”、“info”、“log”)。

类中最后一个被调用的函数是sendLog,它是这样的:

sendLog会调用Logger对象中一个名字与其类型对应的方法。Click事件处理器可以被转换为如下伪代码:

onClick={Logger.error('error message')}>Submit Error
onClick={Logger.warning('warning message')}>Submit Warning
onClick={Logger.info('info message')}>Submit Info
onClick={Logger.log('log message')}>Submit Log

如果你熟悉控制台API或者Logentries JavaScript API,你就会对它很熟悉。

Logger.jsx

Logger.jsx是Logentries对象的接口。在写本文时,Logentries对象针对window对象是全局实例化的。把Logentries对象加入到window意味着使用它不再需要接口。

不过,也有很好的理由来维护接口模式。假若将来Logentries从全局范围中删除了,使用接口可以为我们提供保障。其次,使用全局变量会使未来的维护和开发变得混乱。让一个对象在接口身后模糊化,并通过引用来使用一个对象实例,总比假设存在一个全局对象要思路清晰得多。

代码如下:

第一行调出Logentries库。请求声明允许我们在模块内部构建Logentries对象。此外,声明行告诉编译器在哪里找这个库,并把它捆绑入代码。

module.exports行被其他模块用作构造器。所以其他库,包括我们在上一节中的库,可以同时声明和创建Logger对象。 本例使用此行的目的是:

根据Logentries文档,Logentries对象通过init命令初始化自身。一旦初始化完成,LogEntries对象就可以返回给调用者使用。这里使用的方法和属性都可以在此文档中找到。

结论

使用React的最大挑战可能是其构建过程,这也正是本文的用处所在。使用LogEntries库正确构建代码的基本流程,以及库的使用方法,都包含在本文的示例中以供参考了。祝使用愉快!

本文中所涉及代码均可在Github上找到。

本文转自 OneAPM 官方博客

原文地址:https://dzone.com/articles/integrating-the-logentries-javascript-library-with

时间: 2024-11-01 23:00:03

用 React 整合 LogEntries JavaScript 库的相关文章

React 15.6.0 发布,构建用户界面的 JavaScript 库

React 15.6.0 已发布,React 是 Facebook 开源的用于构建高效.灵活的用户界面的 JavaScript 库. 声明式设计 − 采用声明范式,可以轻松描述应用,无痛创建交互式 UI . 基于组件 − 通过 React 构建组件,使得代码更加容易得到复用,然后组合它们以创建复杂的 UI . 高效易用 − 不对技术堆栈的其余部分做出假设,可以在 React 中开发新功能,而无需重写现有的代码. 该版本替换了原来的降级弃用警告(用 console.warn 取代 console.

项目管理者必知:适用于仪表盘项目的7个优秀JavaScript库

本文讲的是项目管理者必知:适用于仪表盘项目的7个优秀JavaScript库,仪表盘是用于目标或业务流程的视觉指示工具,也用于切割杂乱无章的数据,从而分割出要点的重要工具.它可以帮助评估信息并及时做出正确的决定,一款实时可视化的仪表盘通常由图标.测绘图.图形符号以及数据表格等组成. 作为项目经理,经常会面临"我们的进度怎么样了,接下来会怎么样?"这样的问题.如何用最少的几个关键指标说明项目的整体情况成为考验项目管理者的大难题! 就像开汽车,虽然汽车运行中的各种参数非常多,但仪表盘上只要显

4款开源免费的数据可视化JavaScript库

&http://www.aliyun.com/zixun/aggregation/37954.html">nbsp;   HTML5中新的图形元素和JavaScript引发了交互式数据显示技术的复兴.如今的浏览器用户界面不仅功能丰富.令人赏心悦目,而且还作为数据可视化的载体,用于显示柱状体.气泡图和丰富多彩的地图等. 交互式数据可视化在很大程度上取决于JavaScript库的任务能力.在这篇文章中,我们将看看四个JavaScript库:D3,InfoVis,Processing.j

2017 年 1 月 14 个新鲜的 JavaScript 库

Murri Muuri 能够创建响应式,可排序,可过滤和可拖动的网格布局并拥有许多功能在一个库中. Notyf Notyf 是一个超级简单,响应式,vanilla javascript插件用来显示通知. Input Masking input-mask.js 实现让用户在输入框中按预先设置好的格式进行输入. Zooming Zooming一个用于创建图片缩放功能的javascript库. 它具有平滑的动画,直观的手势,纯javascript和内置移动设备支持, 易于集成和可定制,并放大到高分辨率

WEBJX分享最有用的轻巧和独特的JavaScript库

文章简介:简化web开发者复杂任务的25个有用的javascript库. 在web开发当中,为了制作一个吸引人的动态网站,开发者往往需要使用复杂的编程来实现一些浏览器效果,复杂的数据验证,等等,这个时候使用javascript变得是非常有用的,javascript是具有特殊功能的与正常的html网页结合使用的编码语言,随着许多技术的进步,许多著名的JavaScript库应运而生,像 Dojo, Moo Tools 和其他工具,他对于网页开发者来说确实使工作变得更加容易,许多复杂的任务可以在几分钟

Javascript资源分享:WEBJX分享最新的JavaScript库

文章简介:JavaScript库已经成为了一个web开发人员的工具包的重要组成部分,在这里为大家推荐15个最新的JavaScript库,来增强您的Web体验. JavaScript库已经成为了一个web开发人员的工具包的重要组成部分,在这里为大家推荐15个最新的JavaScript库,来增强您的Web体验. 1. Pikaday : Standalone JavaScript Datepicker 这是一个令人耳目一新的JavaScript日期选择器 轻量轻(压缩和gzip后小于5KB) 没有依

JavaScript库开发者们的规则

核心提示:JavaScript库开发者们的规则 1. 保持无侵入性 我的HTML标记不想知道你的JavaScript代码. 2. 严禁修改和扩展Object.prototype! 这条很重要,因此需要一条完全针对它的规则.对象是JavaScript功能的基本构建模块,不要搞乱它们. 3. 不要过分扩展 对JavaScript内建对象的扩展越少越好.别误解我的意思.JavaScript的原生对象中有用的方法是有点少,有时不得不添加一两个自己的方法.但是,对于富有创造力的(库)程序员来说,添加这"一

使用Rico JavaScript库、ColdFusion MX 7和Windows Indexing Service构建一个

使用Rico JavaScript库.ColdFusion MX 7和Windows Indexing Service构建一个启用Ajax的搜索页面 几个月前,我和一些同事讨论关于将一个搜索工具添加到 Intranet 中(作 为一个向导)并将其扩展到企业网站中的可能性.此提议的主要目标之一是弄清 楚哪些访问者在查找 Web 内容并相应地改变了内容.我们中的一些人构想了一 个完全自定义的解决方案(我不是在开玩笑).他们建议在数据库服务器上构建 表以存放关键字以及与其相关的页面地址.关键字的提取将

让jQuery与其他JavaScript库并存避免冲突的方法

 为了解决jQuery和其他JavaScript库中$()函数的冲突,需要取消jQuery的$()函数,下面有个不错的方法,感兴趣的朋友可以参考下 为了解决jQuery和其他JavaScript库中$()函数的冲突,需要取消jQuery的$()函数,为此jQuery提供了如下方法:  代码如下: //取消jQuery中的$()函数  jQuery.noConflict() ;    将上面的粗体字代码放在JavaScript代码的第一行,这行代码就会取消jQuery的$()函数    注:其实只