#import <React/RCTEventEmitter.h>
#import <React/RCTBridgeModule.h>
@interface ReactEventEmit : RCTEventEmitter<RCTBridgeModule>
-(void)goToCashier:(NSString*) result
@end
ReactEventEmit.m
#import "ReactEventEmit.h"
@implementation ReactEventEmit
@synthesize bridge = _bridge
RCT_EXPORT_MODULE(ReactEventEmit)
+ (id)allocWithZone:(NSZone*)zone {
staticReactEventEmit*sharedInstance =nil
staticdispatch_once_tonceToken
dispatch_once(&onceToken, ^{
sharedInstance = [superallocWithZone:zone]
})
returnsharedInstance
}
-(NSArray *)supportedEvents{
return @[@"goToCashier"]
}
-(void)goToCashier:(NSString*) result
{
NSLog(@"======== cashierSuccess ========== %@",result)
[self sendEventWithName:@"goToCashier" body:@{@"result": result}]
}
@end
RN的module初始化是由RN内部实现的,所以我们调用这个实例的时候,必须是这样子:
ReactEventEmit *emit = [ReactEventEmit allocWithZone:nil]
[emit goToCashier:@"fail"]
JS端调用:
const ReactEventEmit = NativeModules.ReactEventEmit
const myReactEventEmit = new NativeEventEmitter(ReactEventEmit)
this.listener = myReactEventEmit.addListener('goToCashier', (data: { result: string }) =>{
console.warn('====== cashierSuccess ======= ' + JSON.stringify(data))
this.process(data.result)
})
记录这篇文章,在工作中一直借用一些js框架 ui框架,对js底层api有所遗忘,目的为了自己复习以下原生js操作方法,所有的js框架都是基于原生js方法和属性,尤其vue源码使用原生js开发,自底向上模式
Node 是一个接口,各种类型的 DOM API 对象会从这个接口继承。它允许我们使用相似的方式对待这些不同类型的对象;比如, 继承同一组方法,或者用同样的方式测试。
以下接口都从 Node 继承其方法和属性:
Document, Element, Attr, CharacterData (which Text, Comment, and CDATASection inherit), ProcessingInstruction, DocumentFragment, DocumentType, Notation, Entity, EntityReference
注意
NodeList对象是一个节点集合,一般由
Node.childNodes,
document.getElementsByName和
document.querySelectorAll返回
注意
打印的oTest.childNodes
TMLCollection是一个特殊的NodeList,表示包含了若干元素(元素顺序为文档流中的顺序)的通用集合,它是实时更新的,当其所包含的元素发生改变时,它会自动更新。另外,它是一个伪数组,如果想像数组一样操作它们需要像Array.prototype.slice.call(nodeList, 2)这样调用。
获取方法
document.getElementsByClassName
document.getElementsByTagName
注意
document.getElementById:根据ID查找元素,大小写敏感,如果有多个结果,只返回第一个;
document.getElementsByClassName:根据类名查找元素,多个类名用空格分隔,返回一个HTMLCollection。注意兼容性为IE9+(含)。另外,不仅仅是document,其它元素也支持getElementsByClassName方法;
document.getElementsByTagName:根据标签查找元素,*表示查询所有标签,返回一个HTMLCollection。
document.getElementsByName:根据元素的name属性查找,返回一个NodeList。
document.querySelector:返回单个Node,IE8+(含),如果匹配到多个结果,只返回第一个。
document.querySelectorAll:返回一个NodeList,IE8+(含)。
document.forms:获取当前页面所有form,返回一个HTMLCollection;