响应事件

Lynx 提供了一种类似于 Web 的事件机制,使开发者能够根据事件来设计和实现自定义的交互逻辑。

然而,与 Web 系统不同的是,Lynx 的事件响应机制支持双线程处理。这意味着事件处理函数可以根据需要,在主线程或后台线程中执行,从而优化性能和响应速度。

什么是事件

事件是系统中触发某种动作的信号,当事件触发时,开发者可以通过监听该事件,并执行相应的代码来实现相应的逻辑。例如,开发者可以监听点击事件,当用户点击页面时修改节点的背景颜色。

示例 1:

监听用户的点击

当用户在页面上进行点击操作时,系统将触发 tap 事件。

如图所示,开发者可以选择在主线程或后台线程中处理该事件。

  • 当不需要及时的事件响应时,可以选择在后台线程处理事件,并且后台线程的事件处理不会阻塞主线程。
  • 当需要及时的事件响应时,可以选择在主线程处理事件,这可以避免跨线程导致的事件延迟,但需要注意的是,过重的事件处理可能导致主线程繁忙。

具体来说,如果开发者想监听某个节点的点击事件,可以在该节点上设置 bind 类型的事件处理器属性:

<view bindtap={handleTap} />

如果事件处理函数运行在主线程上,则需要在事件处理器属性前额外添加 main-thread: 前缀,例如:

<view main-thread:bindtap={handleTapInMTS} />
如何拦截或者特别监听一个事件?

在 Lynx 中,事件处理器属性还可以实现事件拦截、跨元件事件监听的功能,具体可以参考事件传播

处理用户的点击

当一个事件在节点上触发时,事件处理器属性设置的事件处理函数将被调用。这个函数将接收一个事件对象作为参数,其中包含了关于该事件的详细信息。

事件对象都有哪些?

所有的事件对象都继承自 Event,开发者可以在事件处理函数中根据事件对象来编写事件处理逻辑。

当事件处理函数是一个主线程脚本时,需要在函数体的首行添加一个 'main thread' 指令表明该函数运行在主线程上。

主线程事件处理

在 Lynx 中,主线程和后台线程的事件对象是不同的,后台线程的事件对象是一个纯 json 对象,而主线程的事件对象是一个可以操作的 Event Object

如何根据事件对象操作节点?

Lynx 提供了多种操作节点的方式,具体参考操作节点

例如,针对示例 1,当开发者选择在主线程处理事件时,可以直接在主线程脚本中拿到 e.currentTarget 并调用 setStyleProperty 修改节点的背景颜色。

示例 2

后台线程事件处理

而对于后台线程的事件处理函数,开发者无法通过 e.currentTarget 直接操作节点,但可以通过 SelectorQuery 获取节点引用,再调用 setNativeProps 修改节点的背景颜色。

示例 3:

总结

至此,你已经学会了如何监听用户的点击并根据事件对象执行相应的操作。

对于开发者来说,Lynx 的事件提供了类似于 Web 的 API,但又具有独特的双线程事件响应机制,使得开发者可以根据需要,选择在主线程或后台线程中执行事件处理,从而优化性能和响应速度。

除非另有说明,本项目采用知识共享署名 4.0 国际许可协议进行许可,代码示例采用 Apache License 2.0 许可协议进行许可。