taro-script 0.4 发布,基于Taro v3的js解释器组件
taro-script
基于Taro v3开发,支持多端小程序动态加载远程 JavaScript 脚本并执行,支持 ES5 语法
最近更新内容
- 新增
useScriptContext获取当前执行上下文 - 参数名称调整:useCache -> cache
- 缓存策略调整
- 新增
text属性,可直接传入js字符串 src支持数组,解决多层TaroScript嵌套问题
Usage
npm install --save taro-script
import TaroScript from "taro-script";
<TaroScript text="console.log(100+200)" />;
import TaroScript from "taro-script";
<TaroScript src="https://xxxxx/xx.js">
<View>Hello TaroScript</View>
</TaroScript>;
注 1:同一taro-script只会执行一次,也就是在componentDidMount后执行,后续改变属性是无效的。示例
function App({ url }) {
// 只会在第一次创建后加载并执行,后续组件的更新会忽略所有属性变动
return <TaroScript src={url} />;
}
注 2:多个taro-script会并行加载及无序执行,无法保证顺序。如:
// 并行加载及无序执行
<TaroScript src="path1" />
<TaroScript src="path2" />
<TaroScript src="path3" />
如需要确保执行顺序,应该使用数组或嵌套,例如:
数组方式(建议)
<TaroScript src={["path1", "path2", "path3"]} />
或 嵌套方式
<TaroScript src="path1">
<TaroScript src="path2">
<TaroScript src="path3"></TaroScript>
</TaroScript>
</TaroScript>
globalContext
内置的全局执行上下文
import TaroScript, { globalContext } from "taro-script";
<TaroScript text="var value = 100" />;
此时 globalContext.value 的值为 100
自定义context示例
import TaroScript from "taro-script";
const app = getApp();
<TaroScript context={app} text="var value = 100" />;
此时 app.value 的值为 100
TaroScript 属性
src
类型:string | string[]
要加载的远程脚本
text
类型:string | string[]
需要执行的 JavaScript 脚本字符串,text 优先级高于 src
context
类型:object
默认值:globalContext = {}
执行上下文,默认为globalContext
timeout
类型:number
默认值:10000 毫秒
设置每个远程脚本加载超时时间
onExecSuccess
类型:()=> void
脚本执行成功后回调
onExecError
类型:(err:Error)=> void
脚本执行错误后回调
onLoad
类型:() => void
脚本加载完且执行成功后回调,text存在时无效
onError
类型:(err: Error) => void
脚本加载失败或脚本执行错误后回调,text存在时无效
fallback
类型:React.ReactNode
脚本加载中、加载失败、执行失败的显示内容
cache
类型:boolean
默认值:true
是否启用加载缓存,缓存策略是已当前请求地址作为key,缓存周期为当前用户在使用应用程序的生命周期。
children
类型:React.ReactNode | ((context: T) => React.ReactNode)
加载完成后显示的内容,支持传入函数第一个参数为脚本执行的上下文
useScriptContext()
获取当前执行上下文 hook
import TaroScript, { useScriptContext } from "taro-script";
<TaroScript text="var a= 100">
<Test />
</TaroScript>;
function Test() {
const ctx = useScriptContext();
return ctx.a; // 100
}
evalScript(code: string, context?: {})
动态执行给定的字符串脚本,并返回最后一个表达式的值
import { evalScript } from "taro-script";
const value = evalScript("100+200"); // 300
其他
该组件使用eval5来解析
JavaScript语法,支持ES5上生产环境前别忘记给需要加载的地址配置合法域名
TaroScript 内置类型及方法:
NaN,
Infinity,
undefined,
null,
Object,
Array,
String,
Boolean,
Number,
Date,
RegExp,
Error,
URIError,
TypeError,
RangeError,
SyntaxError,
ReferenceError,
Math,
parseInt,
parseFloat,
isNaN,
isFinite,
decodeURI,
decodeURIComponent,
encodeURI,
encodeURIComponent,
escape,
unescape,
eval,
Function,
console,
setTimeout,
clearTimeout,
setInterval,
clearInterval,
内置类型和当前运行 JavaScript 环境相关,如环境本身不支持则不支持!
导入自定义方法或类型示例:
import TaroScript, { globalContext } from "taro-script";
globalContext.hello = function(){
console.log('hello taro-script')
}
<TaroScript text="hello()"></TaroScript>;
或自定义上下文
import TaroScript from "taro-script";
const ctx = {
hello(){
console.log('hello taro-script')
}
}
<TaroScript context={ctx} text="hello()"></TaroScript>;
taro-script 0.4 发布,基于Taro v3的js解释器组件的更多相关文章
- Taro 3.4 beta 发布: 支持 Preact 为应用开辟更多体积空间
项目体积是困扰小程序开发者的一大问题,如果开发者使用 Taro React 进行开发,更是不得不引入接近 100K 的 React 相关依赖,这让项目体积变得更加捉襟见肘.因此,Taro v3.4 的 ...
- Taro 3 正式版发布:开放式跨端跨框架解决方案
作者:凹凸曼 - yuche 从 Taro 第一个版本发布到现在,Taro 已经接受了来自于开源社区两年多的考验.今天我们很高兴地在党的生日发布 Taro 3(Taro Next)正式版,希望 Tar ...
- 用 React 编写的基于Taro + Dva构建的适配不同端(微信小程序、H5、React-Native 等)的时装衣橱
前言 Taro 是一套遵循 React 语法规范的 多端开发 解决方案.现如今市面上端的形态多种多样,Web.React-Native.微信小程序等各种端大行其道,当业务要求同时在不同的端都要求有所表 ...
- Taro 3.5 canary 发布:支持适配 鸿蒙
一.背景 鸿蒙作为华为自研开发的一款可以实现万物互联的操作系统,一经推出就受到了很大的关注,被国人寄予了厚望.而鸿蒙也没让人失望,今年 Harmony2.0 正式推出供用户进行升级之后,在短短的三个月 ...
- Apache Kylin v3.0.0-alpha 发布
Apache Kylin v3.0.0-alpha 发布 Apr 19, 2019 • Shaofeng Shi 近日 Apache Kylin 社区很高兴地宣布,Apache Kylin v3.0. ...
- 基于Taro与Typescript开发的网易云音乐小程序
基于Taro与网易云音乐api开发,技术栈主要是:typescript+taro+taro-ui+redux,目前主要是着重小程序端的展示,主要也是借此项目强化下上述几个技术栈的使用,通过这个项目也可 ...
- 基于Taro与typescript开发的网易云音乐小程序(持续更新)
基于Taro与网易云音乐api开发,技术栈主要是:typescript+taro+taro-ui+redux,目前主要是着重小程序端的展示,主要也是借此项目强化下上述几个技术栈的使用,通过这个项目也可 ...
- 前后端分离后台管理系统 Gfast v3.0 全新发布
GFast V3.0 平台简介 基于全新Go Frame 2.0+Vue3+Element Plus开发的全栈前后端分离的管理系统 前端采用vue-next-admin .Vue.Element UI ...
- 迷你MVVM框架 avalonjs 0.85发布
迷你MVVM框架 avalonjs 0.85发布 本版本对循环绑定做了巨大改进,感谢@soom, @limodou, @ztz, @Gaubee 提供的大量测试文件. fix scanNodes, 在 ...
随机推荐
- Deep Learning-Based Document Modeling for Personality Detection from Text 阅读笔记
文章目录 代码地址 1. 摘要 2. 方法综述 2.1 输入信息预处理 2.2 文档层面的格式特征提取 2.3 数据过滤 2.4 单词层面上的特征提取 2.5分类 3. 分类网络结构 3.1 步骤 3 ...
- golang的 strconv 包
前言 不做文字搬运工,多做思路整理 就是为了能速览标准库,只整理我自己看过的...... 注意!!!!!!!!!! 单词都是连着的,我是为了看着方便.理解方便才分开的 1.strconv 中文文档 [ ...
- 攻防世界-web(进阶)-Training-WWW-Robots
进行后台扫描,发现一个robots.txt,进入之后说存在fl0g.php,进入即可得flag. cyberpeace{73279bc0d3c28ba6da4d1d3d530e7c16}
- Linux内核之 基本概念
一直想写写Linux内核的文章,特别是进程这方面的,说实话,不好写,也不太敢写:)直到遇到了一本好书.<Linux内核设计与实现>,原书<Linux Kernel Developme ...
- 虚拟化技术之kvm基础
一.KVM简介 KVM的全称是kernel base virtual machine(基于内核的虚拟机)是一个开源的系统虚拟化模块,自Linux 2.6.20之后集成在Linux的各个主要发行版本中. ...
- 面试中HashMap链表成环的问题你答出了吗
HashMap作为老生常谈的问题,备受面试官的青睐,甚至成为了面试必问的问题.由于大量的针对HashMap的解析横空出世,面试官对HashMap的要求越来越高,就像面试官对JVM掌握要求越来越高一样, ...
- JDBC驱动程序分类
JDBC驱动程序分类 JDBC驱动程序:各个数据库厂商根据JDBC的规范制作的 JDBC 实现类的类库 JDBC驱动程序总共有四种类型: 第一类:JDBC-ODBC桥. 第二类:部分本地API部分Ja ...
- Java算法之根据二叉树不同遍历结果重建二叉树
二叉树的遍历方式一般包括前序遍历.中序遍历以及后序遍历: 前序遍历:根结点 | 左子树 | 右子树 中序遍历:左子树 | 根结点 | 右子树 后序遍历:左子树 | 右子树 | 根结点 二叉树遍历的性质 ...
- Mac上如果看不到.git目录的解决方法
Mac OS X上,如果需要查看.git目录下的隐藏文件,操作很简单: 做法是:打开一个Terminal终端窗口,输入: defaults write com.apple.finder AppleSh ...
- 通过DatabaseMetaData数据库元信息类,获取特定数据库的元信息
数据库版本:mysql8.0.18 ide:idea 2019.3 可以看到代码中连接的数据库为course_select,是一个学生的选课系统的数据库 然后通过DatabaseMetaData的ge ...