Preact——无线端活动页的轻量级开发方案

简介: > React开创了新的**避免手动操作DOM**方式——`JSX`,它不仅仅是一套库,而是一套标准。 ## 1、前言 React现如今已经成为前端开发者的首选技术了,它天生携带着组件化的理念,并且拥有极强的生态,如`Redux`,`Flux`等数据管理工具,`Material-UI`,`MUI`,`Ant.

React开创了新的避免手动操作DOM方式——JSX,它不仅仅是一套库,而是一套标准。

1、前言

React现如今已经成为前端开发者的首选技术了,它天生携带着组件化的理念,并且拥有极强的生态,如Redux,Flux等数据管理工具,Material-UI,MUI,Ant.Design等UI组件,对于一个全新的控制台系统,在脚手架的辅助下,我们可以花费很少的时间就能投入到业务开发中。

对于无线端,React也能够很好的支持,但是对于一些运营活动页面来说,大部分情况下使用kimi是可以应付的,这些活动页具有如下特点:

  • 时效性强,很多运营需求来的特别急,往往是即开发即交付的。
  • 风格别致,基本上活动页UI无法通用,但是有一些特例,如:Loading,Dialog,Toast,Tab。
  • 逻辑简单,基本为内容展示,不用写太多,甚至不需要写JavaScript。

但是对于以下特点的活动页,使用kimi就有些力不从心了。

  • 内聚性强,此类活动由多个页面共同组成,多个页面通过跳转形成闭环。
  • 动态内容多,需要调用多个接口进行页面的呈现。
  • 页面展现丰富,页面上有许多行动点,每个行动点对应一段业务逻辑,多页面间相互关联。
  • 需求变化频繁,此类活动往往备受关注,需求在前期不可能完全明确界限,上线后也会根据外界反馈随时更改需求。

对于上述活动页而言,其已经可以看作一个完整的中型Application了,如果仅仅使用kimi,则因为状态多,交互多而存在代码质量不好把控,在操作DOM上花费额外精力,造成项目Delay的风险,由此可见,对于这类活动页,我们有必要使用一些库来帮我们解决问题了,React自己天然一套全家桶,携带了PropType,Children,Synthetic Events(合成事件),这些对于Web应用来说,依然是可以的,但是对于活动页来说,还是有些重了,于是要搬出Preact了,接下来简单地对它有一个了解。

  • Preact是以React为标准实现的一套库。
  • 两者的API几乎一致,迁移起来很方便。
  • 现有项目改造也很容易,无非是改改Webpack,Babel的配置文件。
  • 它很(压缩后3KB),小到可以认为它只是借鉴了React的思想,来避免你手动操作DOM
  • 它很快,比React,Vue都快,非常适合移动端。参考

2、Hello World

下面是它的一个简单示例,你会发现几乎和React一模一样,只是引入的文件发生了改变,也就是说对于现有的一个页面,我们可以用Preact重构掉原先的DOM操作。

import {h,render} from 'preact';

render((
  <div>
    <h1>Hello World</h1>
    <button onClick={function(){console.log('hi')}}> Click Me </button>
  </div>
),document.body);

3、核心了解

3.1 处理JSX

在开发React时,我们都会去写JSX而不去写原生的React API,回顾一下,我们看一下JSX会被Babel翻译成什么。

// 这是一段React示例代码
class Demo extends React.Component {
  render(){return (
      <div className="active">
      <ul></ul>
      </div>
      )}
}
//经过Babel转译后
  _createClass(Demo, [{
    key: "render",
    value: function render() {
      return React.createElement(
        "div",
        { className: "active" },
        React.createElement(
          "ul",
          null
        )
      );
    }
  }]);

我们看到处理DOM的API为React.createElement,在Preact里,它使用了hyperscript来代替React.createElement这个方法,所以你需要告诉Babel使用h去处理。

{
  "plugins": [
    ["transform-react-jsx", { "pragma":"h" }]
  ]
}

甚至你也可以这么做。

import { h } from 'preact'

const React = {
  createElement:h
}

3.2 事件

Preact只是简单地对事件做了一层处理,我们看它的源码便可知晓,我们在JSX里写的onClick其实最终形成了addEventListener('click'),由于其只是原生的事件绑定,这样给予我们的灵活度更高,移动端头疼的300ms延时和点击穿透问题也可以迎刃而解(fastclick)。

else if ('o' === name[0] && 'n' === name[1]) {
     var l = node._listeners || (node._listeners = {});
     name = toLowerCase(name.substring(2));
     if (value) {
         if (!l[name]) node.addEventListener(name, eventProxy);
     } else if (l[name]) node.removeEventListener(name, eventProxy);
     l[name] = value;
 }

4、按需使用

4.1 看做新的模板渲染方式

在前端有许多中模板渲染方案,如jade(pug),mustache,ejs,我们也可以使用JSX用来渲染,相比前面几种,JSX写法简单,非常容易。举个例子:如果我们要根据后端返回的一段奖品列表渲染一个列表,用ejs可能会是下面这样:

<ul>
  <% lotteries.forEach(function(lottery){ %>
    <% include lottery/show %>
  <% }) %>
</ul>

但是使用Preact,我们可以只使用render方法,结合JSX语法,来作为我们渲染HTML的工具。

let content = lotteries.map(lottery=>(
  <li>{lottery.prizeName}</li>
))
let List = (
  <ul>
  {content}
  </ul>
)
let html = render(<List/>); // DOM Object
let htmlString = html.outerHTML // String
// do anythingÏ

5、参考资料

目录
相关文章
|
安全 物联网 开发者
开放下载!《无需从0开发 平头哥教你1天上手蓝牙Mesh应用解决方案》
弄潮新基建,玩转智能生活!《无需从0开发 平头哥教你1天上手蓝牙Mesh应用解决方案》电子书现已开放下载,立即加入书单吧!
16968 0
开放下载!《无需从0开发  平头哥教你1天上手蓝牙Mesh应用解决方案》
|
4月前
|
数据可视化 搜索推荐 BI
一套依托“电脑端+移动端”双端联合应用模式的智慧综合执法办案系统源码
智慧综合执法系统构建了线上指挥到监督的全流程工作模式,实现电脑端与移动端双平台协同作业。执法人员利用移动端实时记录、处理案件,并同步至电脑端。系统支持应急管理案件快速办理,具备法律法规智能引用、地理信息绑定等功能,确保流程标准化、规范化,提升执法效率与质量。此外,还提供案件登记、办理、统计分析及电子案卷生成等模块,配合电子支付系统,实现全方位智能执法管理。
一套依托“电脑端+移动端”双端联合应用模式的智慧综合执法办案系统源码
|
存储 边缘计算 负载均衡
直播APP源码搭建:核心的服务器系统
这就是直播APP源码平台的服务器系统,拥有着管理用户、数据、直播流质量与带宽等优秀的能力,是直播APP源码平台正常运行提供服务和用户优质体验的重要支撑,服务器系统可以说是直播APP源码平台的重要核心。
直播APP源码搭建:核心的服务器系统
|
存储 网络协议 调度
淘宝移动端统一网络库的架构演进和弱网优化技术实践
本文将介绍淘宝 APP 统一网络库演进的过程,讲述如何围绕体验持续构建南北向从监测到加速一体化的终端网络架构,通过构建 NPM 弱网诊断感知能力,落地原生多通道技术/多协议择优调度手段,贴合厂商附能网络请求加速,实现去 SPDY 及规模化 IPv6/H3 协议簇的平滑过渡,为用户提供弱网更好、好网更优的 APP 加载浏览体验,支撑业务创造更多的可能性。
372 0
|
安全 数据安全/隐私保护 Android开发
三款远程控制软件对比,5大挑选指标:安全、稳定、易用、兼容、功能
众所周知,随着科技的发展和时代的进步,远程控制软件在日常工作中的运用所处可见,社会对远程控制软件的需求也在日益增长,为用户提供了便捷的远程访问和控制计算机的能力,使其在现代化社会中扮演着重要的角色。因此,市面上也出现了很多相似功能的产品,但是他们各有不同的特点和功能。本文主要介绍的是ToDesk、向日葵、TeamViewer三款远程控制软件间的不同之处,我将从安全、稳定、易用、兼容、功能几个方面来进行对比,帮助大家选择适合自己需求的远程办公软件。
337 1
三款远程控制软件对比,5大挑选指标:安全、稳定、易用、兼容、功能
|
负载均衡
LOOK!直播APP源码平台的稳定控制方法
我就把简单两步控制直播APP源码平台的稳定的方法分享给大家了,开发直播APP源码平台优质知识分享,大家有什么不懂的或是想要开发直播APP源码平台可以问我
LOOK!直播APP源码平台的稳定控制方法
|
网络协议 数据库 Android开发
移动端接入关键技术解析
移动端接入关键技术解析
134 0
|
缓存 运维 Kubernetes
CNStack 网络插件:hybridnet 的设计与实现
CNStack 网络插件:hybridnet 的设计与实现
CNStack 网络插件:hybridnet 的设计与实现
|
存储 人工智能 安全
在线办公大势所趋,细说3种主流云办公方式优劣
云办公会不会在未来五到十年成为普遍现象?当我们在疫情期间不得不加入远程办公行列时,其实这个概念已经早早发芽,在打工人心中蠢蠢欲动。当“云工作”、“云录制”、“云办公”成为流行词并发展成办公主流,对习惯集中上班的人来说,工作上云意味着什么呢?
275 0
《无需从0开发 平头哥教你1天上手蓝牙Mesh应用解决方案》电子版地址
无需从0开发 平头哥教你1天上手蓝牙Mesh应用解决方案
154 0
《无需从0开发 平头哥教你1天上手蓝牙Mesh应用解决方案》电子版地址