首页 文章 精选 留言 我的

精选列表

搜索[协同工作],共10000篇文章
优秀的个人博客,低调大师

了解学习 JSX 的工作方式

过去半年基本都是使用VUE来开发项目,也有了一定的经验了,后续将会推出一套前后端完整的基于VUE的管理系统。从今天开始学习 React ,首先就从定义React组件的JSX开始。那什么是JSX呢?与JavaScript有啥关系?本文就来一起学习。 JSX到底是什么? JSX,即 JavaScript XML,JavaScript 的语法扩展,允许在 JavaScript 文件中编写 HTML (这是个人内心抗拒的原因)。不必通过 JavaScript 对象创建、修改或者拼接 HTML ,可以使用类似 XML 的语法创建元素,编译运行时生成相应的 DOM 元素。 那它看起来怎么样?请看下面的代码: const jsx = <div>Hello React</div>; 如何使用JSX? 那么如何在实践中使用JSX呢?JSX是灵活的,不管哪种编程方式,都需要遵循一定的规则。下面就来逐一介绍。 在JSX中使用表达式 假设希望在HTML模板中使用JavaScript变量,使用花括号 {},可以插值变量以获得动态值: const title = "DevPoint"; const expression = <h1>Hello {title}</h1>; 这里 {title} 将在 h1 元素中替换为 DevPoint 。当然,不仅可以嵌入JavaScript变量,还可以使用更复杂的表达式: const a = 1; const b = 1; const expression = ( <code> {a} + {b} = {a + b} </code> ); 这将输出1+1=2,在处理数组时,表达式也通常用于生成HTML元素列表。假设有一个动态菜单,从API接收数据: { "menu": [ { "name": "Home", "link": "/" }, { "name": "About", "link": "/about" }, { "name": "Contact", "link": "/contact" } ] } 然后,可以使用JSX表达式映射整个数组: const menu = <ul>{menu.map((item) => console.log(item))}</ul>; 在这里,使用JSX表达式中的 Array.map 方法将每个元素记录到控制台,但是如何显示列表元素呢? const menu = ( <ul> {menu.map((item) => ( <li> <a href={item.link}>{item.name}</a> </li> ))} </ul> ); 可以简单地从函数返回所需的元素,这相当于在下面显式写出 return 关键字: const menu = ( <ul> {menu.map((item) => { return ( <li> <a href={item.link}>{item.name}</a> </li> ); })} </ul> ); 表达式还可用于创建条件语句,或使用三元运算符根据变量的值返回不同的HTML元素,如下: { name && <h1>Hello {name}</h1>; } { /* 这里是注释 */} { name ? <h1>Hello {name}</h1> : null; } 如上所见,JSX中的注释也用于表达式中。如果要在一行前面写//的话,它也会被打印到最终的HTML文件中,因为它被解释为自由流文本。因此,在使用注释时需要使用表达式。 在JSX中使用属性 正如上面所看到的,也可以像平常一样在JSX元素中使用HTML属性。还可以对属性使用JSX表达式,或者如果使用的是静态值,则可以使用常规HTML中的引号来定义它们: <a href={item.link} target="_blank"> {item.name} </a>; 在JSX中,这些称为 props,需要注意的一点是,当涉及到使用破折号的属性时,JSX 使用驼峰大小写。例如,如果要添加 aria 属性,将执行以下操作: <div aria-label="Label"></div> <div aria-checked="true"></div> <div tab-index="0"></div> <div ariaLabel="Label"></div> <div ariaChecked="true"></div> <div tabIndex="0"></div> 在JSX中使用属性时还有一个特殊的例外,那就是使用HTML类。由于单词 class 在JavaScript中是一个保留关键字,因此需要改用 className: <div class="carousel"></div> <div className="carousel"></div> 始终关闭JSX标记 当使用自动关闭标记或使用纯粹用于传递视觉信息的元素且这些元素没有任何子元素时,请确保始终关闭标签,否则,将会出现错误: {/* 错误的方式 */} <br> <img> <div> {/* 正确的方式 */} <br /> <img /> <div className="loader" /> 返回JSX 需要指出的另一条重要规则是,一次只能返回一个JSX元素。请看下面的 HTML 元素: <span className="tooltip">...</span> <div className="tooltip-backdrop" /> 这个例子是无效的,因为试图返回多个相邻的JSX元素,为了修复它,需要将其包装在父级中: <span className="tooltip-container"> <span className="tooltip">...</span> <div className="tooltip-backdrop" /> </span> 或者,如果不想用不必要的HTML元素污染DOM树,还可以使用一个称为片段的特殊标记: <React.Fragment> <span className="tooltip">...</span> <div className="tooltip-backdrop" /> </React.Fragment> {/* 或者 */} <Fragment> <span className="tooltip">...</span> <div className="tooltip-backdrop" /> </Fragment> {/* 或者 */} <> <span className="tooltip">...</span> <div className="tooltip-backdrop" /> </> 以上三个示例将生成相同的代码,都能正常运行,并且不会向HTML文件中添加额外的DOM元素。 存储JSX JSX元素也可以存储在变量中,并传递给其它JSX元素使用。但是,很可能会涉及到将JSX元素存储在函数中的情况: const Slider = () => ( <div>这是一个组件</div> ); <Slider /> 此外,建议将函数大写,否则,它将被视为HTML元素,例外的情况是使用对象方法,例如: const component = { slider() { return <div>这是一个组件</div> } }; <component.slider /> 通过使用函数,还可以传递可用于HTML元素的插件: const Slider = ({ size }) => ( <div className={size}>这是一个可以控制尺寸的组件</div> ); <Slider size="large" /> <Slider size="medium" /> <Slider size="small" /> 如上所见,不仅限于使用HTML属性的名称,还可以使用自定义名称。 JSX生成成什么? 那么JSX究竟生成了什么呢?浏览器无法理解JSX语法,因此 React 需要将其编译为浏览器能够理解的 JavaScript 函数调用。这些JavaScript函数调用最终将创建和更新必要的HTML元素。以下面的代码片段为例,它将生成以下函数调用: const jsx = <div>Welcome to React</div>; React.createElement("div", null, "Welcome to React"); const jsx = <div className="carousel" />; React.createElement("div", { className: "carousel" }); 如果 JSX 元素有子元素,那么这些子元素也将被编译为 React.createElement 调用,并最终生成在 JavaScript 包中,如下: React.createElement(component, props, ...children); 同样,如果对组件使用小写,则这些组件将被视为HTML元素,因此请确保将它们大写: <component />; React.createElement("component"); <Component />; React.createElement(Component); <component.slider />; React.createElement(component.slider); 总结 JSX 可以简化代码,使其更易于使用,同时也使其更具可读性。为了回顾本教程的重要部分,关于 JSX 与 JavaScript 的连接,以下是一些注意事项: JSX 是 JavaScript 的语法扩展,代表 JavaScript XML。 React 可以使用或不使用 JSX 编写,尽管如此,强烈建议使用 JSX。 JSX 支持使用大括号来使用表达式。 JSX 中的属性是用驼峰命名法编写的。 JSX 元素必须始终关闭。如果不涉及子元素,则元素必须是闭合(成对)的。 一次只能返回一个 JSX,如果需要返回多个元素,请使用片段。 函数可以返回 JSX 元素。 JSX 生成为 React.createElement 函数调用。

优秀的个人博客,低调大师

几种常见负载均衡算法工作原理

轮询 顾名思义将请求按顺序轮流地分配到后端服务器上,它均衡地对待后端的每一台服务器,而不关心服务器实际的连接数和当前的系统负载。 优点 缺点 服务器请求数据相同 服务器压力不同,不适合根据服务器配置不同的情况 随机 通过系统的随机算法,根据后端服务器的列表大小值来随机选取其中的一台服务器进行访问。由概率统计理论可以得知,随着客户端调用服务端的次数增多,其实际效果越来越接近于平均分配调用量到后端的每一台服务器,也就是轮询的结果。 优点 缺点 使用简单 服务器压力不同,不适合根据服务器配置不同的情况 源地址哈希 源地址哈希的思想是根据获取客户端的IP地址,通过哈希函数计算得到的一个数值,用该数值对服务器列表的大小进行取模运算,得到的结果便是客服端要访问服务器的序号。采用源地址哈希法进行负载均衡,同一IP地址的客户端,当后端服务器列表不变时,它每次都会映射到同一台后端服务器进行访问。 优点 缺点 将来自同一IP地址的请求,同一会话期内,转发到相同的服务器;实现会话粘滞。 目标服务器宕机后,会话会丢失 加权轮询法 不同的后端服务器可能机器的配置和当前系统的负载并不相同,因此它们的抗压能力也不相同。给配置高、负载低的机器配置更高的权重,让其处理更多的请;而配置低、负载高的机器,给其分配较低的权重,降低其系统负载,加权轮询能很好地处理这一问题,并将请求顺序且按照权重分配到后端。 优点 缺点 根据权重,调节转发服务器的请求数目 使用相对复杂 加权随机法 与加权轮询法一样,加权随机法也根据后端机器的配置,系统的负载分配不同的权重。不同的是,它是按照权重随机请求后端服务器,而非顺序。 最小连接数法 最小连接数算法比较灵活和智能,由于后端服务器的配置不尽相同,对于请求的处理有快有慢,它是根据后端服务器当前的连接情况,动态地选取其中当前积压连接数最少的一台服务器来处理当前的请求,尽可能地提高后端服务的利用效率,将负责合理地分流到每一台服务器。 优点 缺点 根据服务器当前的请求处理情况,动态分配 算法实现相对复杂,需要监控服务器请求连接数

优秀的个人博客,低调大师

智能枕头的功能及工作原理

释放压力 改善睡眠 这是一款骨传导音乐枕头,可以通过下载苹果版或者安卓版APP,将线插入手机耳机口,选好曲目开始播放,有四种关闭时间可以选择。而且这款枕头不需要充电或按电池,只要手机有电就可以了。这款枕头还能监测睡眠状态、评估睡眠质量。当你的头部接触到枕头,枕头感觉压力缓慢下沉,记忆材质细胞此事慢慢膨胀,在包裹住你的头颈的同时,吸收压力并释放压力。当到达你身体需要的高度时,材质细胞会自动填充稳固住形态与位置,让你放松感持续存在。 互通心意 感知内心 我们都知道,异地恋的孩纸们很辛苦,很多时候会被距离所打败。那么,下面不得不介绍这款传播爱意的枕头。这款智能情侣枕头是有两部分组成,,一款可检测脉搏的手环和一个内置了扬声器的枕头。两个人无论相离多远,便都可在睡前听到对方的心跳。不管是改善睡眠质量还是情侣间的传情,智能枕头的功能已经超乎了人们的想象,它不仅给人们带来了身体上的健康,更多的是精神上的慰藉。 遮挡阳光 追踪睡眠 智能枕头有一个内部的小袋可以用来放置手机,让你躺在床上听音乐时也不会受到耳机线的干扰,与此同时由于能将手机放置在小袋子里,它还能成为智能睡眠追踪器,从而实现更加精确的睡眠追踪。此外它的表面还设计了一个头套,可以让头部更暖和,也可以在白天睡觉时起到遮光的作用。 治疗鼾症 安心睡觉 枕边设备是整个智能枕头的“大脑”,集成了蓝牙模块、止鼾“聪明心”、本地算法中心、气泵/储气盒等功能模块。通优化算法,聪明心可以在用户使用三天内完成对用户鼾声特性的个性化学习,分辨和识别每个人不同的鼾声,并根据大喊着的鼾声分贝、频率等,对枕头发出“指令”识别的准确性可达到百分之九十以上。 智能枕头控制系统,包括声音传感器,用于采集鼾声;微振动传感器,用于采集环境噪声;鼾声介入装置;控制器,与所述微振动传感器、声音传感器、鼾声介入装置均通过导线连接;所述控制器接收所述微振动传感器探测的信号1,并根据所述第一信号判断控制所述声音传感器动作;所述控制器接收所述声音传感器探测的信号2,并根据所述信号2控制所述鼾声介入装置动作。本实用新型可以判断用户是否在睡眠状态,避免误判,多判,漏判等情况出现,同时可以与手机进行通信,将鼾声检测与介入结果,睡眠质量分析,深度-浅度睡眠周期分析等数据传递给手机,用户获得良好的产品体验。 就现在而言,智能枕头的设计水平、智能功能都还相当有限,未来随着相关技术的升级有望获得非常大的提升。而在细分领域发展方面,目前的智能枕头也比较局限,随着市场的进一步铺开,其种类与形式创新还有扩张空间。 据相关调查数据显示,截止2016年底,我国枕头市场规模已经突破1180亿元,其中智能枕头在枕头总体销量中所占比率正加速上升。当前的智能家居热潮还在延续,各种家庭智能产品依然在不断涌上市场。中国智能制造网认为,智能枕头作为未来智能生活的标配件,其发展前景十分值得期待。 同时,随着人工智能、物联网等前沿技术的发展,智能枕头有望结合智能家居系统实现融合发展,推动智能家居领域实现新增长,为人们的未来智能生活带来更佳体验。

优秀的个人博客,低调大师

android studio插件提升工作效率

SonarLint 代码质量管理插件 ButterKnife Zelezny ButterKnife 生成器,快速根据布局文件生成属性对象。 SelectorChapek 设计师给我们提供好了各种资源,每个按钮都要写一个selector是不是很麻烦?这么这个插件就为解决这个问题而生,你只需要做的是告诉设计师们按照规范命名就好了,其他一键搞定。 GsonFormat 根据json数据快速生成实体bean ParcelableGenerator Android中的序列化有两种方式,分别是实现Serializable接口和Parcelable接口,但在Android中是推荐使用Parcelable,只不过我们这种方式要比Serializable方式要繁琐,那么有了这个插件一切就ok了。 LeakCanary 良心企业Square最近刚开源的一个非常有用的工具,强烈推荐,帮助你在开发阶段方便的检测出内存泄露的问题,使用起来更简单方便,而且我们团队第一时间使用帮助我们发现了不少问题。 大部分内容摘自:http://stormzhang.com/android/2015/05/26/android-tools/ 本文转自秋楓博客园博客,原文链接:http://www.cnblogs.com/rwxwsblog/p/5383338.html,如需转载请自行联系原作者

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册