weex事件传递注意项

在开发weex应用过程中我们封装了登录模块,但后来发现登录信息会突然消失。 Google一下后,答案如下:

在Weex中,iOS Native把事件传递给JS目前只有2种方式,一是Module模块的callback,二是通过Component组件自定义的通知事件。

  1. callback 在WXModuleProtocol中定义了2种可以callback给JS的闭包。
/**
 * @abstract the module callback , result can be string or dictionary.
 * @discussion callback data to js, the id of callback function will be removed to save memory.
 */
typedef void (^WXModuleCallback)(id result);

/**
 * @abstract the module callback , result can be string or dictionary.
 * @discussion callback data to js, you can specify the keepAlive parameter to keep callback function id keepalive or not. If the keepAlive is true, it won't be removed until instance destroyed, so you can call it repetitious.
 */
typedef void (^WXModuleKeepAliveCallback)(id result, BOOL keepAlive);
复制代码

两个闭包都可以callback把data传递回给JS,data可以是字符串或者字典。

这两个闭包的区别在于:

  • WXModuleCallback用于Module组件,为了节约内存,该回调只能回调通知JS一次,之后会被释放,多用于一次结果。
  • WXModuleKeepAliveCallback同样是用于Module组件,但是该回调可以设置是否为多次回调类型,如果设置了keepAlive,那么可以进行持续监听变化,多次回调,并返回给 JS。 我们使用的是WXModuleCallback,怪不得登录信息会丢失啊
  1. fireEvent:params:domChanges: 在WXComponent里面定义了2个可以给JS发送消息的方法:
/**
 * @abstract Fire an event to the component in Javascript.
 *
 * @param eventName The name of the event to fire
 * @param params The parameters to fire with
 **/
- (void)fireEvent:(NSString *)eventName params:(nullable NSDictionary *)params;

/**
 * @abstract Fire an event to the component and tell Javascript which value has been changed. 
 * Used for two-way data binding.
 *
 * @param eventName The name of the event to fire
 * @param params The parameters to fire with
 * @param domChanges The values has been changed, used for two-way data binding.
 **/
- (void)fireEvent:(NSString *)eventName params:(nullable NSDictionary *)params domChanges:(nullable NSDictionary *)domChanges;

复制代码

这两个方法的区别就在于最后一个domChanges的参数,有这个参数的方法主要多用于Weex的Native和JS的双向数据绑定。

参考文章:Weex 事件传递的那些事儿

转载于:https://juejin.im/post/5ac495046fb9a028ca5330f8

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值