1、Vue生命周期
  1. beforeCreate() //组件创建之前
  2. created() //组件被创建,还没有装载在DOM上,不能操作DOM
  3. beforeMount() //组件装载之前,
  4. mounted() //挂载到真实的DOM节点上,可以操作DOM
  5. beforeUpdate() //数据被更新之前
  6. updated() //数据更新后,一般用watch来替换,update只有页面依赖的data的数据更新才会触发
  7. beforeDestroy() //销毁组件前
  8. destroyed() //销毁组件

2、React生命周期
  1. React生命周期分为三大周期,11个阶段,调用顺序如下。
  2. 1)在创建的五大阶段,调用方法顺序如下
  3. getDefaultProps:定义默认属性数据
  4. getInitialState:初始化默认状态数据
  5. componentWillMount:组件即将被创建
  6. render:渲染组件
  7. componentDidMount:组件构建完成,在这个生命周期里进行http请求
  8. 2)在存在(运行)期的五大阶段,调用方法的顺序如下。
  9. componentWillReceiveProps:组件即将被接收新的属性数据
  10. shouldComponentUpdate:判断组件是否应该被更新
  11. componentWillUpdate:组件即将被更新
  12. render:渲染组件,当state,props的状态更新时,就会触发
  13. componentDidUpdate:组件更新完成
  14. 3)在销毁期的一个阶段,调用方法componentWillUnmount,表示组件即将被销毁。

各大框架 - 图1

3、Angular生命周期

当 Angular 使用构造函数新建一个组件或指令后,就会按下面的顺序在特定时刻调用这些生命周期钩子方法:

钩子 用途及时机
ngOnChanges()
//有父子组件传值,先触发这个方法。没有就先触发ngOnInit()
当 Angular(重新)设置数据绑定输入属性时响应。 该方法接受当前和上一属性值的 SimpleChanges
对象在 ngOnInit()
之前以及所绑定的一个或多个输入属性的值发生变化时都会调用。
ngOnInit() 在 Angular 第一次显示数据绑定和设置指令/组件的输入属性之后,初始化指令/组件。在第一轮 ngOnChanges()
完成之后调用,只调用一次
ngDoCheck()
//可以做一些自定义的操作
检测,并在发生 Angular 无法或不愿意自己检测的变化时作出反应。在每个变更检测周期中,紧跟在 ngOnChanges()
ngOnInit()
后面调用。
ngAfterContentInit()
//组件渲染完成后触发
当 Angular 把外部内容投影进组件/指令的视图之后调用。第一次 ngDoCheck()
之后调用,只调用一次。
ngAfterContentChecked() 每当 Angular 完成被投影组件内容的变更检测之后调用。ngAfterContentInit()
和每次 ngDoCheck()
之后调用
ngAfterViewInit()
//视图加载
当 Angular 初始化完组件视图及其子视图之后调用。第一次 ngAfterContentChecked()
之后调用,只调用一次。
ngAfterViewChecked() 每当 Angular 做完组件视图和子视图的变更检测之后调用。ngAfterViewInit()
和每次 ngAfterContentChecked()
之后调用。
ngOnDestroy() 每当 Angular 每次销毁指令/组件之前调用并清扫。 在这儿反订阅可观察对象和分离事件处理器,以防内存泄漏。在 Angular 销毁指令/组件之前调用。
  1. //重点关注
  2. constructor
  3. ngInit
  4. ngAfterViewInit
  5. ngOnDestory

4、Android生命周期
  1. - onCreate 活动第一次创建时候调用
  2. - onStart 活动可见时候触发
  3. - onResume 活动处于栈的顶部会触发
  4. - onPause 活动处于暂停状态时候触发
  5. - onStop 活动不可见的时候触发
  6. - onDestroy 活动被销毁的时候触发
  7. - onRestart 活动从暂停变为运行状态的时候触发

5、小程序生命周期
  1. onLoad() 监听页面加载
  2. onReady() 监听页面初次渲染完成
  3. onShow() 监听页面显示
  4. onHide() 监听页面隐藏
  5. onUnload() 监听页面卸载

6、初次加载、A-B、B-A哪些生命周期触发
  1. Android
  2. 初次加载:onCreate() onStart() onResume()
  3. A-B: onPause() onStop()
  4. B-A: onRestart() onStart() onResume()
  1. Vue:
  2. 初次加载:beforeCreatecreatedbeforeMountmounted
  3. A-BbeforeDestroy() destroyed()
  4. B-AbeforeCreatecreatedbeforeMountmounted
  1. react:
  2. 初次加载:constructor -> componentWillMount -> render -> componentDidMount
  3. 数据更新时触发:componentDidUpdate() render()
  4. 将要被卸载时触发:componentWillUnmount()
  1. angular:
  2. 初次加载时触发: constructor() ngOnInit()
  3. 父子组件传参时触发: constructor() ngOnChange() ngOnInit()
  4. 视图加载: ngAfterViewInit()
  5. 销毁时触发: ngOnDestroy()
  1. 小程序:
  2. 初次加载:onLoad() onReady() onShow()
  3. A-B onHide()
  4. B-A: onShow()

7、Vue、React、Angular、Android、小程序中如何获取DOM
  1. Vue:
  2. 通过给元素绑定ref=“XXX”,然后通过this.$refs.XXX或者this.refs['XXX']来获取
  3. React:
  4. 1react原生函数findDOMNode获取dom
  5. 2、通过ref来定位一个组件,切记ref要全局唯一
  6. Angular
  7. 通过ViewChild装饰器获取
  8. Android
  9. 通过id获取
  10. Button btn = (Button) findViewById(R.id.send_http);
  11. 小程序:
  12. 1 obj.in(component) 多用于组件的选择器
  13. 2 obj.select(selector) selectorcss选择器
  14. 3 obj.selectAll(selector)

8、vue和react的区别
  1. react:
  2. 1 函数式思想,all in js ,jsx语法,js操控css
  3. 2 单项数据流
  4. 3 setState重新渲染
  5. 4 每当应用的状态被改变时,全部子组件都会重新渲染。当然,这可以通过shouldComponentUpdate这个生命周期方法来进行控制,如果为true继续渲染、false不渲染,但Vue将此视为默认的优化。
  6. vue:
  7. 1 响应式思想,也就是基于数据可变的。把htmljscss、组合到一起,也可以通过标签引擎组合到一个页面中
  8. 2 双向绑定,每一个属性都需要建立watch监听(页面不用,涉及到组件更新的话需要)
  9. 3 Vue宣称可以更快地计算出Virtual DOM的差异,这是由于它在渲染过程中,会跟踪每一个组件的依赖关系,不需要重新渲染整个组件树

9、get传值、动态路由区别
  1. git传值:传的值使用问号拼接在路由后
  2. 动态路由:传的值直接跟在路由后

10、插槽slot的作用
  1. 用来传递内容的,但我们不能通过属性传递带标签的内容,所以就需要插槽。其实质是对子组件的扩展,通过slot
  2. 槽向组件内部指定位置传递内容,即将<slot></slot>元素作为承载分发内容的出口

11、各框架父子组件传参
  1. Vue:
  2. 父传子:父组件通过props向下传递数据给子组件
  3. 1、子组件通过属性接收父组件传递的参数 <home-table :data="arr"></home-table>
  4. 2、子组件接收的参数需要在props属性中注册
  5. props: {
  6. data: {
  7. type: Array
  8. }
  9. }
  10. 子传父:子组件通过this.$emit("methodName",data),父组件定义同名方法即可。
  11. 1、使用$emit方式自定义事件,向父组件传参
  12. <button @click="handleDelete(index)">删除</button>
  13. handleDelete(index){
  14. this.$emit("deleteItem",index)
  15. }
  16. 2、父组件接收子组件传递过来的事件参数
  17. <home-table :data="arr" @deleteItem="handleDelete"></home-table>
  18. handleDelete(index){
  19. console.log(index)
  20. }
  1. React:
  2. 父传子:父组件通过props向下传递数据给子组件
  3. 1、子组件通过属性接收父组件传递的参数
  4. <Title msg="hello world"></Title>
  5. 2、从props中接收参数
  6. <h1>{this.props.msg}</h1>
  7. 子传父:同vue
  8. 1、子组件向父组件自定义方法传参
  9. <h1 onClick={this.handleClick.bind(this,"1355")}>{this.props.msg}</h1>
  10. handleClick=(id)=>{
  11. console.log(id)
  12. this.props.deleteItem(id)
  13. }
  14. 2、父组件自定义方法接收子组件传的参数
  15. <Title deleteItem = {this.handleDelete.bind(this)} msg={this.state.msg}></Title>
  1. Angular:
  2. 父传子:
  3. 1、在父组件中定义一个参数
  4. 2、在父组件中,子组件自定义属性接收传递的参数
  5. <app-item *ngFor="let item of movies" [data]="item"></app-item>
  6. 2、子组件中引入Input模块
  7. 3@Input注册传过来的参数
  8. @Input() data:any
  9. 子传父:
  10. 1、在父组件中定义一个方法
  11. <app-header [run]="run"></app-header>
  12. 2、在子组件中获取方法
  13. @Input() run:any
  14. 3、子组件通过事件传递参数给父组件
  15. handleClick(){
  16. this.run("1234")
  17. }
  18. 4、父组件接收子组件传过来的参数
  19. run(id:string){
  20. console.log(id)
  21. }
  1. 小程序:
  2. 父传子:
  3. 1、在父组件中,子组件自定义属性接收传递的参数
  4. <v-item wx:for="{{songs}}" data="{{item}}" index="{{index}}"></v-item>
  5. 2、在子组件properties属性中注册传递过来的参数
  6. 子传父:
  7. 1、在子组件中定义一个事件
  8. handleClick(){
  9. var id=this.properties.itemId;
  10. var index = this.properties.index;
  11. this.triggerEvent("toggle",{id,index})
  12. }
  13. 2、在父组件中接收事件
  14. <v-item bind:toggle="handleToggle"></v-item>

12、配置子路由、重定向
  1. 子路由
  2. vue:
  3. {
  4. children:[
  5. {
  6. path:"morning",
  7. component:MorningComponent
  8. },
  9. ]
  10. }
  11. react:
  12. <Switch>
  13. <Route path="/about/morning">
  14. <Morning/>
  15. </Route>
  16. </Switch>
  17. angular:
  18. {
  19. children:[
  20. {
  21. path:"morning",
  22. component:()=>import('路径)
  23. },]
  24. }
  25. 重定向
  26. vue:
  27. {
  28. path: '/',redirect: '/home',
  29. }
  30. react:
  31. <Redirect from="/about" to="/about/morning"></Redirect>
  32. angular:
  33. {
  34. path:"",//不能写斜杠
  35. redirectTo:"morning",
  36. pathMatch:"full"
  37. }