ReactNative面试(1)
1.props和state的区别?
现在我们来总结下,props与state的区别:
- props是指组件间传递的一种方式,props自然也可以传递state。由于React的数据流是自上而下的,所以是从父组件向子组件进行传递;另外组件内部的this.props属性是只读的不可修改!
- state是组件内部的状态(数据),不能够直接修改,必须要通过setState来改变值的状态,从而达到更新组件内部数据的作用。
props和state是经常要结合使用的,父组件的state可以转化为props来为子组件进行传值。在这种情况下,子组件接收的props是只读的,想要改变值,只能通过父组件的state对其进行更改。
props 和 state的区别 http://www.cnblogs.com/ysbpysbp/p/6115900.html
2.知道react-native的生命周期么?
15523592184747.jpg
https://www.jianshu.com/p/ea61a014ce4e
https://www.jianshu.com/p/379aecebb1dc
3.react-native父组件和子组件直接如何交互?
父控件调用子控件中的方法
在父控件中给子控件设置ref="ref1",然后设置button点击事件。在button点击事件中通过this.refs.ref1.buttonClick()来调用子控件中的方法
子控件调用父控件中的方法
在父控件中嵌套子控件的时候,给子控件添加事件属性,eg:
在父控件中给子控件添加了onPress={()=>this.btnClick()} 和onClick={()=>this.btn2Click()}事件
然后在子控件中通过this.props.onPress();调用父控件的()=>this.btnClick()方法。通过this.props.onClick();调用父控件的()=>this.btn2Click()方法
4.react-native父组件和兄弟组件之间如何交互?
Event Emitter/Target/Dispatcher :需要从EventEmitter/EventTarget/EventDispatcher继承或者实现合适的接口
Signals:与Event Emitter/Target/Dispatcher 相比,不需要指定事件的“名称”,可以避免硬编码带来的问题
Publish / Subscribe : 类似于很多语言中的事件总线EventBus广播的方式,相比EventEmitter,优点是组件之间可以完全独立,没有任何关联。React中比较常用的是库是PubSubJS,关于这个库的详细使用请查看官方的说明
[React Native]组件之间通信 https://www.jianshu.com/p/9b0d5a3d0518
5.如果给setState传入第二个参数,那这第二个参数有什么作用?是干什么的?
一个回调函数,当setState结束并重新呈现该组件时将被调用。
一些没有说出来的东西是setState是异步的,这就是为什么它需要一个第二个回调函数。通常情况下,最好使用另一种生命周期方法,而不是依赖这个回调函数,但是很高兴知道它存在。
this.setState( { username: 'tylermcginnis33' }, () => console.log('setState has finished and the component has re-rendered.') )
6.rn怎么跟原生进行交互?
JS调用原生
在调用原生时,我们需要实现RCTBridgeModule和RCT_EXPORT_MODULE();
RCT_EXPORT_MODULE();则是一个宏定义,返回moduleName,并且调用+ load方法注册
老版本的调用方式为,但是接口被标记为deprecated:__deprecated_msg("Subclass RCTEventEmitter instead");
[self.bridge.eventDispatcher sendAppEventWithName:kGiftReloadData body:nil];
新版本的调用方式为
ZanEventEmitter *emitter = [[ZanEventEmitter alloc] init]; emitter.bridge = self.bridge; [emitter sendEventWithName:kGiftReloadData body:nil];
https://www.jianshu.com/p/ea61a014ce4e
7.用过fetch么?那你知道fetch和ajax的区别么?
简单来说 Ajax的本质是使用XMLHttpRequest对象来请求数据;而fetch是用于发送请求的API。
具体的看这篇文章(http://www.cnblogs.com/September-9/p/7099975.html),因为ajax我没用过,对他不是很了解。