• react面试题笔记整理


    componentWillReceiveProps调用时机

    • 已经被废弃掉
    • 当props改变的时候才调用,子组件第二次接收到props的时候

    在调用setState 之后发生了什么

    • 状态合并,触发调和:

      setState函数之后,会将传入的参数对象与当前的状态合并,然后出发调用过程

    • 根据新的状态构建虚拟dom

      经过调和过程,react会高效的根据新的状态构建虚拟DOM树,准备渲染整个UI页面

    • 计算新老树节点差异,最小化渲染

      得倒新的虚拟DOM树后,会计算出新老树的节点差异,会根据差异对界面进行最小化渲染

    • 按需更新

      在差异话计算中,react可以相对准确的知道哪些位置发生了改变以及该如何改变,这保证按需更新,而不是宣布重新渲染

    概述一下 React中的事件处理逻辑。

    为了解决跨浏览器兼容性问题, React会将浏览器原生事件( Browser Native Event)封装为合成事件( Synthetic Event)并传入设置的事件处理程序中。
    这里的合成事件提供了与原生事件相同的接口,不过它们屏蔽了底层浏览器的细节差异,保证了行为的一致性。另外, React并没有直接将事件附着到子元素上,而是以单一事件监听器的方式将所有的事件发送到顶层进行处理(基于事件委托原理)。
    这样 React在更新DOM时就不需要考虑如何处理附着在DOM上的事件监听器,最终达到优化性能的目的。

    在 React中元素( element)和组件( component)有什么区别?

    简单地说,在 React中元素(虛拟DOM)描述了你在屏幕上看到的DOM元素。
    换个说法就是,在 React中元素是页面中DOM元素的对象表示方式。在 React中组件是一个函数或一个类,它可以接受输入并返回一个元素。
    注意:工作中,为了提高开发效率,通常使用JSX语法表示 React元素(虚拟DOM)。在编译的时候,把它转化成一个 React. createElement调用方法。

    参考:前端react面试题详细解答

    在 ReactNative中,如何解决 adb devices找不到连接设备的问题?

    在使用 Genymotion时,首先需要在SDK的 platform-tools中加入环境变量,然后在 Genymotion中单击 Setting,选择ADB选项卡,单击 Use custom Android SDK tools,浏览本地SDK的位置,单击OK按钮就可以了。启动虛拟机后,在cmd中输入 adb devices可以查看设备。

    说说 React组件开发中关于作用域的常见问题。

    在 EMAScript5语法规范中,关于作用域的常见问题如下。
    (1)在map等方法的回调函数中,要绑定作用域this(通过bind方法)。
    (2)父组件传递给子组件方法的作用域是父组件实例化对象,无法改变。
    (3)组件事件回调函数方法的作用域是组件实例化对象(绑定父组件提供的方法就是父组件实例化对象),无法改变。
    在 EMAScript6语法规范中,关于作用域的常见问题如下。
    (1)当使用箭头函数作为map等方法的回调函数时,箭头函数的作用域是当前组件的实例化对象(即箭头函数的作用域是定义时的作用域),无须绑定作用域。
    (2)事件回调函数要绑定组件作用域。
    (3)父组件传递方法要绑定父组件作用域。
    总之,在 EMAScript6语法规范中,组件方法的作用域是可以改变的。

    生命周期调用方法的顺序是什么?

    React生命周期分为三大周期,11个阶段,生命周期方法调用顺序分别如下。
    (1)在创建期的五大阶段,调用方法的顺序如下。

    • getDetaultProps:定义默认属性数据。

    • getInitialState:初始化默认状态数据。

    • component WillMount:组件即将被构建。

    • render:渲染组件。

    • componentDidMount:组件构建完成

    (2)在存在期的五大阶段,调用方法的顺序如下。

    • componentWillReceiveProps:组件即将接收新的属性数据。

    • shouldComponentUpdate:判断组件是否应该更新。

    • componnent WillUpdate:组件即将更新。

    • render:渲染组件。

    • componentDidUpdate:组件更新完成。

    (3)在销毁期的一个阶段,调用方法 componentWillUnmount,表示组件即将被销毀。

    React 中 refs 的作用是什么

    • RefsReact 提供给我们的安全访问 DOM元素或者某个组件实例的句柄
    • 可以为元素添加ref属性然后在回调函数中接受该元素在 DOM 树中的句柄,该值会作为回调函数的第一个参数返回

    React- Router有几种形式?

    有以下几种形式。
    HashRouter,通过散列实现,路由要带#。
    BrowerRouter,利用HTML5中 history API实现,需要服务器端支持,兼容性不是很好。

    在 React 中如何处理事件

    为了解决跨浏览器的兼容性问题,SyntheticEvent 实例将被传递给你的事件处理函数,SyntheticEvent是 React 跨浏览器的浏览器原生事件包装器,它还拥有和浏览器原生事件相同的接口,包括 stopPropagation()preventDefault()
    比较有趣的是,React 实际上并不将事件附加到子节点本身。React 使用单个事件侦听器侦听顶层的所有事件。这对性能有好处,也意味着 React 在更新 DOM 时不需要跟踪事件监听器。

    受控组件和非受控组件区别是啥?

    • 受控组件是 React 控制中的组件,并且是表单数据真实的唯一来源。

    • 非受控组件是由 DOM 处理表单数据的地方,而不是在 React 组件中。
      尽管非受控组件通常更易于实现,因为只需使用refs即可从 DOM 中获取值,但通常建议优先选择受控制的组件,而不是非受控制的组件。
      这样做的主要原因是受控组件支持即时字段验证,允许有条件地禁用/启用按钮,强制输入格式。

    redux有什么缺点

    • 一个组件所需要的数据,必须由父组件传过来,而不能像flux中直接从store取。
    • 当一个组件相关数据更新时,即使父组件不需要用到这个组件,父组件还是会重新render,可能会有效率影响,或者需要写复杂的shouldComponentUpdate进行判断。

    在使用 React Router时,如何获取当前页面的路由或浏览器中地址栏中的地址?

    在当前组件的 props中,包含 location属性对象,包含当前页面路由地址信息,在 match中存储当前路由的参

  • 相关阅读:
    公司刚来的测试,00后真卷,上班还没2年,跳到我们公司起薪20k....
    Linux--基础命令
    微信公众号开发
    为什么你的自媒体账号涨粉很慢?
    ingress相关yaml文件报错且相关资源一切正常解决方法
    Java之反射获取和赋值字段
    pikachu ssrf
    flink的安装与使用(ubuntu)
    spring security(二)--授权
    C#文件重命名工具
  • 原文地址:https://blog.csdn.net/beifeng11996/article/details/127681692