我的编程空间,编程开发者的网络收藏夹
学习永远不晚

uni-app中renderjs使用的方式浅析

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

uni-app中renderjs使用的方式浅析

前言

对于UNI APP端的开发而言,由于上并没有document,不能进行相关的DOM操作,同时有关DOM渲染的第三方库(echart、openlayer等)也无法有效的使用,因此官方推出了renderjs方案,来解决上述问题。

renderjs是一个运行在视图层的js

renderjs的主要作用有2个:

大幅降低逻辑层和视图层的通讯损耗,提供高性能视图交互能力

在视图层操作dom,运行for web的js库

renderjs和service层的通信

具体分为三部分:

1.在template中通过用户手动操作触发事件

2.在service层中调用方法

3.在renderjs中调用方法

从renderjs到service层:通过this.$ownerInstance.callMethod()方法可以调用service中的方法,第一个参数是方法名,第二个参数是传过去的参数

使用方式

设置 script 节点的 lang 为 renderjs

script的module的名称可以随便取,module=(值任意,相当于命名空间,之后会根据这个名字调用其中的方法),但是change:参数名称必须和module保持一致,虽然不会阻断renderjs的运行,但是会报错,也会导致无法捕获数据的变化

<script module="test" lang="renderjs">
	export default {
		mounted() {
			// ...
		},
		methods: {
			// ...
		}
	}
</script>
<template>
	<view>
		<!--  prop是个名字,可以随意改,注意:change:[name]这两个名字需要相同就行了  -->
		<!-- 从service层到renderjs:首先在template中绑定一个service中定义的值,然后在同样的位置增加:change:(属性名)=(renderjs的module名.触发的方法)来实现通信。
简单来说就是service负责数据的更改,通过template监听数据的变化来通知renderjs 
			this.$ownerInstance.callMethod方法必须通过点击事件执行-->

	<!-- msg是要向renderjs发送的数据,testRenderjs 为renderjs模块名称,onChange是renderjs中的监听方法 -->
		<view :prop="msg" :change:prop="testRenderjs.onChange" id="renderjs-view">{{msg}}</view>

		<button @tap="changeMsgFn">点击修改options</button>

		<button @tap="testRenderjs.emitData">直接调用renderjs中的emitData方法</button>
	</view>
</template>
<script>
	// 原先的script,这里被称为service层 
	export default {
		data() {
			return {
				// 这里存放准备传递给renderjs的数据  
				msg: "我是service层原来的msg"
			}
		},
		methods: {
			// 触发service层 出入renderjs数据改变
			changeMsgFn() {
				//  修改msg 触发change
				this.msg = "msg的值变了"
			},
			// 接收renderjs发回的数据
			acceptDataFromRenderjs(data) {
				console.log('从renderjs中接收到的数据', data)
				this.msg = data.content
			}
		}
	}
</script>
<!--  testRenderjs 为renderjs模块名称,lang固定写法 -->
<script module="testRenderjs" lang="renderjs">
	export default {
		data() {
			return {
				content:"我是来自renderjs的数据"
			}
		},
		created() {
			console.log('renderjs初始化完毕')
		},
		mounted() {
			const view = document.getElementById('renderjs-view')
			const button = document.createElement('button')
			button.innerText = '一个按钮'
			view.appendChild(button)
		},
		methods: {
			// 接收逻辑层service层发送的数据
			onChange(newValue, oldValue, ownerInstance, instance) {
				console.log('service层中的options发生变化')
				console.log('新值newValue', newValue)
				console.log('旧值oldValue', oldValue)
				// ownerInstance和this.$ownerInstance一样,可用来向service层通信     
				// instance和ownerInstance的区别是:       
				// instance.$el指向的是触发事件的那个节点;ownerInstance.$el指向当前vue文件中的根节点;    
				// instance的作用目前尚不明确,官方没有给出用法   
			},
			// 发送数据到service层
			emitData(event, ownerInstance) {
				// event是事件对象
				
				ownerInstance.callMethod('acceptDataFromRenderjs', {
					content: this.content
				})
				// 或者
				
				// 需要注意的是:只有通过在template中用户手动操作触发renderjs的方法参数是这两个:event, ownerInstance;通过其他方法触发的函数参数不一样
			}
			
		}
	}
</script>

uni-app官网文档

补充:使用时的注意事项

  • 目前仅支持内联使用。
  • 不要直接引用大型类库,推荐通过动态创建 script 方式引用。
  • 可以使用 vue 组件的生命周期不可以使用 App、Page 的生命周期
  • 视图层和逻辑层通讯方式与 WXS 一致,另外可以通过 this.$ownerInstance 获取当前组件的 ComponentDescriptor 实例。
  • 观测更新的数据在视图层可以直接访问到。
  • APP 端视图层的页面引用资源的路径相对于根目录计算,例如:./static/test.js。
  • APP 端可以使用 dom、bom API,不可直接访问逻辑层数据,不可以使用 uni 相关接口(如:uni.request)
  • H5 端逻辑层和视图层实际运行在同一个环境中,相当于使用 mixin 方式,可以直接访问逻辑层数据。

总结

到此这篇关于uni-app中renderjs使用方式的文章就介绍到这了,更多相关uni-app中renderjs使用内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

uni-app中renderjs使用的方式浅析

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

在uni-app中使用vant组件的方法

最近在做uni-app的时候需要用到vant组件,在网上看到了很多的使用vant组件的方法,但是讲解的大多繁琐,或者无法使用,现把最新,最实用的vant组件的使用方法分享给大家,需要的朋友可以参考下
2023-02-18

uni-app中弹窗的使用与自定义弹窗的方法

这篇文章主要介绍“uni-app中弹窗的使用与自定义弹窗的方法”,在日常操作中,相信很多人在uni-app中弹窗的使用与自定义弹窗的方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”uni-app中弹窗的使用
2023-06-30

uni-app组件的基本使用方法是什么

本文小编为大家详细介绍“uni-app组件的基本使用方法是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“uni-app组件的基本使用方法是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1.组件概念首先讲
2023-07-05

浅析Angular项目中使用 SASS 样式的方法

Angular项目中怎么使用 SASS 样式?下面本篇文章给大家介绍一下Angular 中 SASS 样式的使用方法,希望对大家有所帮助!
2022-11-22

浅析集中式状态管理Vuex的使用方法

如何使用集中式状态管理的Vuex?下面本篇文章就带大家了解一下vuex,简单聊聊vuex的使用方法,希望对大家有所帮助!
2023-05-14

浅析JavaScript中严格模式的使用

在ECMAScript5标准中,JavaScript提出了严格模式的概念(StrictMode),本文就来和大家简单讲讲JavaScript中严格模式的具体使用,感兴趣的可以了解一下
2023-05-18

浅析Java模板方法的一种使用方式

模板方法说白了就是将一段代码模板化,将通用的代码段抽取出来,并提供一些自定义的接口去定制的特定位置的某些业务功能。本文主要来和大家聊聊它的一种使用方式,希望对大家有所帮助
2023-02-23

浅析PHP7中匿名类的使用方法

在PHP7之后,PHP中加入了匿名类的特性。匿名类和匿名方法让PHP成为了更现代化的语言,也让我们的代码开发工作越来越方便。下面本篇文章就来简单带大家了解一下PHP7 匿名类的用法,希望对大家有所帮助!匿名类就像一个没有事先定义的类,而在定义的时候直接就进行了实例化。 // 直接定义$objA = new class{ public function getName(){ ech
2022-08-08

浅析Java中Future接口的使用方法

在Java开发中,异步编程是提高系统性能和响应能力的重要手段之一。本文将深入探讨Future接口的原理和源码解读,帮助读者更好地理解Future接口的工作机制和使用方法
2023-05-19

Android App中使用Pull解析XML格式数据的使用示例

Pull解析XML文件的方式与SAX解析XML文件的方式大致相同,他们都是基于事件驱动的。所以,利用pull解析XML文件需要下面几个步骤: 1)通过XMLPullParserFactory获取XMLPullParser对象。
2022-06-06

Pythonsklearn中的K-Means聚类使用方法浅析

这篇文章主要介绍了Pythonsklearn中的K-Means聚类使用方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
2022-12-20

浅析github上包的使用方法

随着互联网技术的不断发展,软件开发行业也愈发繁荣。在这个过程中,像GitHub这样的平台成为了开发者们相互交流分享代码的重要平台之一。而在GitHub上,开发者们分享的代码往往以“包”的形式呈现。本文将为大家介绍如何在GitHub上使用这些
2023-10-22

Kotlin静态方法的使用浅析

静态方法在其他高级语言(如C++,Java)中也叫类方法。静态方法在调用时无需创建实例,通过类名.方法名的方式调用。在java中调用静态方法的只需在声明前面加关键字static即可。而kotlin中却比较复杂,下面我们来了解一下
2022-11-13

编程热搜

目录