首页 > 其他分享 >react面试2

react面试2

时间:2024-03-08 20:48:35浏览次数:21  
标签:vue 函数 渲染 DOM react 面试 组件

纯函数 + 不可变值   JSX的本质等同vue的模板 createElement 等同 h 函数 第一个参数可能是组件 也可能是 tag,根据首字母大小写来区分是否是组件 第二个参数是 null 或者 { }   合成事件

 

为什么要这样使用? 更好的兼容性和跨平台,尽量摆脱了DOM事件的逻辑,然后自己去实现一套 逻辑。例如可以移植到 移动端上 挂载到root 上,减少内存消耗,避免频繁解绑 方便事件的统一管理(如事务机制)   react的patch被拆分为2个阶段 reconciliation 阶段 执行diff算法,纯JS计算 commit阶段,将diff结果渲染到DOM   JS是单线程,且和DOM渲染共用一个线程 当组件复杂时,组件更新时计算和渲染都压力大 如果同时在有DOM操作,比如动画将比较卡顿   解决方案 fiber 1.将reconciliation阶段进行任务拆分(commit 无法拆分,因为是DOM渲染无法拆分) 2.如果DOM需要渲染时暂停,空闲时恢复 window.requestIdleCallback 在空闲时被调用。  知道DOM需要渲染 如果不支持这个API 那么就是原来的逻辑   react性能优化 1.增加 key 2.自定义事件,DOM销毁 3.合理使用异步组件 4.减少函数 bind 次数 5.合理使用 SCU Pure 和 memo 6.合理使用 不可变库 7.使用SSR   前端通用优化,如 图片懒加载 / webpack优化   react和vue的区别 都支持组件化 / 数据修改视图 / 使用diff算法,操作vdom react使用JSX拥抱JS,vue使用模板 拥抱html 对于修改数据时候:react是函数编程, vue是声明是编程 react需要 自力更生,vue 很多已有功能     class组件问题 1.不易拆分和重构 测试,不容易复用逻辑 2.相同业务逻辑比较分散   自定义 hook:解耦代码,独立封装功能(是一个个函数) 只能用于 函数组件和 自定义 hook中 只能用于顶层代码,不能在 if 和 for中,因为函数组件执行完了,就销毁了,重新渲染之后 函数会重新执行,这和 class 不一样 有 new 出来的实例 re-render的时候 会读取 state的值,严格按照这个顺序来读取值的 useEffect中的函数 也是一样,re-render的时候   注意事项 useState 初始化值只有 第一次 有效 useEffect内部不能修改 state, 没有依赖每次都会执行 依赖为空的话,re-reder不会重新执行 useEffect,只会执行一次 useEffect可能出现死循环 当依赖中有 数据 对象这种引用类型 就有可能出现这种问题 一般是 传入的 每次都会改变了的值 Object.is() 来判断传入值的相等   函数更加容易拆分,测试更加灵活 view = fn(props) 函数组件,执行完即销毁,无法 存储 state   useReducer是单组件状态管理,组件通讯还是要使用 redux 只是借鉴了 redux的思想    

标签:vue,函数,渲染,DOM,react,面试,组件
From: https://www.cnblogs.com/escapist/p/18061801

相关文章

  • react面试
     <pdangerouslySetInnerHTML={{__html:rowHtml}}>事件bind(this)this是undefined静态方法来定义不需要bind:handle=()=>{} event参数event.target指向当前元素,表示绑定在哪里event.currentTarget输出也是当前元素,但是是假象不是原声的event是Synthe......
  • vue面试1
    生命周期函数(父子)顺序父beforeCreate =>.父created==>.父beforeMount==>子beforeCreate==> 子created==> 子beforeMount==> 子mounted==>父mounted更新顺序父beforeUpdate==>子beforeUpdate==>子updated==>父updated卸载顺序父beforeDestory/子before......
  • react-router路由懒加载/路由守卫
    路由懒加载目前在网络上搜到的路由懒加载方式基本都是通过React.lazy()方法配合Suspense的方式,可能是受vue-router的影响,我很不喜欢这种方式,不喜欢就改变。上代码import{createBrowserRouter}from"react-router-dom";constrouter=createBrowserRouter([{......
  • 前端面试题集合
    小程序面试题小程序的双向绑定this.setData({})小程序的自适应rpx小程序在页面中怎么样传递数据(1).全局传递app.jsglobalData(2).跳转页面的传参wx.navigateTo 和 wx.redirectTo在跳转后的页面onload的option小程序的生命周期onLoad 页面加载时触发。一个页......
  • 前端技术面试题
      1.JS中的数据类型有哪些?_____________________________________________ 2.JS中强制类型转换为number类型的方法有哪些?_____________________________________________ 3.字符串转换成数组的方法是_________,数组转换成字符串的方法是________ 4.手写js‘数组去重......
  • 面试1
    1.为什么typeofnull ='object'是通过类型标记位,而null是一个固定的值。开头为000000:object001:integer010:double100:string110:boolean 2.+操作转化为数字传统数据类型toNumber(null)  0toNumber(undefined) NaNtoNumber(1)  1toNumber("123a......
  • react-pdf 实现pdf文件预览功能
    参考文档https://www.npmjs.com/package/react-pdfhttps://github.com/wojtekmaj/react-pdf#readme 一、概述react项目中,很多时候(尤其是需展示报告的页面)会遇到需要预览pdf文件的需求。而据调研,使用react-pdf插件可以很好地实现这个功能。  二、操作步骤1.安......
  • Vue面试题
    1、active-class是哪个组件的属性?嵌套路由怎么定义?答:vue-router模块的router-link组件。 2、怎么定义vue-router的动态路由?怎么获取传过来的动态参数?答:在router目录下的index.js文件中,对path属性加上/:id。 使用router对象的params.id 3、vue-router有哪几种导航钩子? ......
  • 前端中级面试
     js原理题1.什么是闭包,举个例子说明一下?答:“闭包就是能够读取其他函数内部变量的函数。例如在javascript中,只有函数内部的子函数才能读取局部变量,所以闭包可以理解成“定义在一个函数内部的函数“。在本质上,闭包是将函数内部和函数外部连接起来的桥梁。”举例:创建闭包最常......
  • 软件测试经典面试题:如何测微信的朋友圈?
    这是一道非常经典的面试题,相信很多小伙伴在面试中都被面试官问到过这个问题,想要回答好这个面试题,我们首先要搞清楚面试官在考察候选者什么方向测试技能。其实不难猜出,面试官主要是想考察候选者测试用例设计能力。一般会从以下两个方面来考察候选者:1、测试用例设计的全面性2、测试......