首页
学习
活动
专区
圈层
工具
发布

前端面试之React

聊聊react中class组件和函数组件的区别 类组件是使用ES6 的 class 来定义的组件。 函数组件是接收一个单一的 props 对象并返回一个React元素。...关于React的两套API(类(class)API 和基于函数的钩子(hooks) API)。官方推荐使用钩子(函数),而不是类。因为钩子更简洁,代码量少,用起来比较"轻",而类比较"重"。...难以理解的 class,理解 JavaScript 中 this 的工作方式。 区别: 函数组件的性能比类组件的性能要高,因为类组件使用的时候要实例化,而函数组件直接执行函数取返回结果即可。...3.因为调用方式不同,在函数组件使用中会出现问题 在操作中改变状态值,类组件可以获取最新的状态值,而函数组件则会按照顺序返回状态值 React Hooks(钩子的作用) Hook 是 React 16.8...官方建议优先使用useEffect React 组件通信方式 react组件间通信常见的几种情况: 父组件向子组件通信 子组件向父组件通信 跨级组件通信 非嵌套关系的组件通信 1)父组件向子组件通信

3.1K20

React Hooks - 缓存记忆

解决"虚幻"的性能问题是一件实用的事情,在开始优化之前,请先熟悉React Profiler。 ? 如果您确定了渲染速度较慢的场景,那么使用缓存记忆可能是最好的选择。...如果您的函数组件在相同的Props属性下呈现相同的结果,React将会使用缓存,跳过这次渲染,并重用最后一次渲染的结果。 默认情况下,它将仅对props对象中的复杂对象进行浅层比较。...如果要控制比较,还可以提供自定义比较功能作为第二个参数。 不使用缓存记忆 让我们看一个不使用缓存记忆的示例,和理解为什么这会导致性能问题。...useCallback 幸运的是,React为此有两个内置的钩子:useMemo和useCallback。useMemo用于昂贵的计算,useCallback用于传递优化的子组件所需的回调。...我建议的经验法则是,对于只在组件内部使用的数据,主要使用useState;对于需要在父级和子级之间进行双向数据交换,则useReducer是一个更好的选择。

4.1K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    React基础(2)-深入浅出JSX

    实例化对象下的一个render方法,接收两个实际参数,第一个实参数,是要渲染的组件,第二个实参数,是该组件的挂载点,将组件渲染到什么位置上,这里是渲染到根节点root上 ReactDOM.render(...If you meant to render a collection of children, use an array instead 该错误的意思是:对象无效作为React子对象(找到:具有键{name...如果您要渲染子集合,请使用数组 当然如果是数组的话,它会自动的给拼接起来,本质上是通过数组中的join("")方法处理后的结果 { ["川川", "全宇宙最帅"]} //川川全宇宙最帅 当然对于在JSX...既然js对象描述的UI(DOM)信息与HTML所展示的结构信息是一样的,那为什么不用Js对象来代替呢,因为用对象字面量写的方式太繁琐了,又臭又长的,结构又不清晰,如果用HTML来展示UI信息,那么就简单多了...以及JSX的一些注意事项,JSX的具体使用,嵌入表达式,最重要的是JSX的原理,在使用JSX中,react是如何将jsx语法糖装换为真实DOM,并渲染到页面中的,当然,JSX仍然还有一些注意事项,边边角角的知识的

    2.8K00

    React学习(二)-深入浅出JSX

    的一个实例对象,它是用来将虚拟dom转换为真实DOM的,ReactDOM实例化对象下的一个render方法,接收两个实际参数,第一个实参数,是要渲染的组件,第二个实参数,是该组件的挂载点,将该组件渲染到什么位置上...If you meant to render a collection of children, use an array instead 该错误的意思是:对象无效作为React子对象(找到:具有键{name...如果您要渲染子集合,请使用数组 当然如果是数组的话,它会自动的给拼接起来,本质上是通过数组中的join("")方法处理后的结果 { ["川川", "全宇宙最帅"]} //川川全宇宙最帅 当然对于在JSX...(确认过眼神,放张美女,缓缓眼神疲惫) 既然js对象描述的UI(DOM)信息与HTML所展示的结构信息是一样的,那为什么不用Js对象来代替呢,因为用对象字面量写的方式太繁琐了,又臭又长的,结构又不清晰,...,包括标签名,属性,子元素以及事件对象等 使用React一定要引入React库,引入这个是为了解析识别JSX语法糖(React.createElement()函数的替代) 当然另一方面也是为了创建虚拟DOM

    2.5K30

    React 特性剪辑(版本 16.0 ~ 16.9)

    Time Slicing 对应解决左侧的问题, Suspense 对应解决了右侧的问题。它们共同要解决的是的提升用户体验, 在更多的场景下都可以做到可交互。而 Fiber 架构是上述两者的基石。...Suspense(16.6, 16.8, 16.9) Suspense 意思是能暂停当前组件的渲染, 当完成某件事以后再继续渲染。 code splitting(16.6, 已上线): 文件懒加载。...:如果组件返回是 Portal 对象,则将该组件的父组件的上的事件 copy 到该组件上。...Error Boundaries React 16 提供了一个新的错误捕获钩子 componentDidCatch(error, errorInfo), 它能将子组件生命周期里所抛出的错误捕获, 防止页面全局崩溃...服务端渲染一般是作为最后的优化手段, 这里浅显(缺乏经验)谈下 React 16 在其上的优化。

    1.7K30

    40道ReactJS 面试问题及答案

    它们是只读的(不可变的),有助于使组件可重用和可定制。 Props 作为属性传递给组件,并且可以使用类组件中的 this.props 在组件内进行访问,或者作为函数组件的参数进行访问。 5....Render props 是 React 中的一种模式,其中组件的 render 方法返回一个函数,并且该函数作为 prop 传递给子组件。...什么是 React Hook?有哪些重要的钩子? React Hooks 是使功能组件能够使用 React 中的状态和生命周期功能的函数。...React Portal 还确保门户组件内的事件和状态更新按预期工作,即使该组件在其父级 DOM 层次结构之外呈现也是如此。...每个测试用例都会根据组件的功能而有所不同,因此这里没有提供具体的示例代码。 35.如何进行React应用程序的组件级和端到端测试? 要测试 React 应用程序,您可以使用各种测试工具和技术。

    7.1K10

    React 全面入门指南

    xxx : yyy}React 事件绑定​​语法​​: on + 事件名称 = {事件函数}​​注意​​: 要获得回调函数的事件对象参数,在定义函数时设置形参 e传递自定义参数时,事件绑定的位置要写成箭头函数的写法同时传递事件对象和自定义参数时...,从而控制影响组件的渲染结果​​基础写法​​: const {count, setCount} = useState(0)​​注意​​: useState 是一个函数,返回值是一个数组数组中的第一个参数是状态变量...,第二个参数是 set 函数用来修改状态变量useState 的参数将作为 count 的初始值React 中,状态被认为是只读的,只能替换它不能修改它,直接修改状态不能引发视图更新对于简单数据类型,定义函数...是一个函数,在内部可以放置要执行的操作参数 2 是一个数组,可以放置依赖项,不同依赖项会影响第一个参数函数的执行​​依赖性参数说明​​: 没有依赖项: 组件初始渲染 + 组件更新时会执行(参数函数)空数组依赖...使用 组件配置二级路由渲染位置​​默认二级路由只需要在二级路由的位置去掉 path,设置 index 属性为 true404 路由配置​​1.

    43810

    通过防止不必要的重新渲染来优化 React 性能

    如果您使用基于类的组件而不是函数组件,请将 extends React.Component 更改为 extends React.PureComponent 以获得相同的效果。...幸运的是,在这种情况下,样式对象始终是相同的,因此我们可以在 App 组件之外创建一次,然后在每次渲染时重新使用它。...但是如果样式是动态计算的呢? 在这种情况下,您可以使用 useMemo 挂钩来限制对象的更新时间。...如果我们传入的子节点不仅仅是一个简单的字符串,我们会在对象标识和无意的重新渲染方面遇到同样的问题。...然而,同样的解决方案也适用。 如果孩子是静态的,请将它们移出函数。 如果它们依赖于状态,请使用 useMemo。

    7.6K41

    社招前端二面必会react面试题及答案_2023-05-19

    什么是装饰者模式:在不改变对象自身的前提下在程序运行期间动态的给对象添加一些额外的属性或行为可以提高代码的复用性和灵活性。...,提高编码效率redux的缺点: 当数据更新是有时候组件不需要,也要重新绘制,影响效率react hooks,它带来了那些便利代码逻辑聚合,逻辑复用HOC嵌套地狱代替classReact 中通常使用...B,再在第二个位置插入D,而是 (对同一层级的同组子节点) 添加唯一key进行区分,移动即可。...在编译完成之后,JSX 表达式就变成了常规的 JavaScript 对象,这意味着你可以在 if 语句和 for 循环内部使用 JSX,将它赋值给变量,接受它作为参数,并从函数中返回它。...比较有趣的是,React 实际上并不将事件附加到子节点本身。React 使用单个事件侦听器侦听顶层的所有事件。这对性能有好处,也意味着 React 在更新 DOM 时不需要跟踪事件监听器。

    1.9K10

    react面试如何回答才能让面试官满意

    后这个动作是不会执行的,所以要dispatch这个action,让store通过reducers去做更新React Component 就是react的每个组件。...(5)MixinsReact.createClass:使用 React.createClass 的话,可以在创建组件时添加一个叫做 mixins 的属性,并将可供混合的类的集合以数组的形式赋给 mixins...解答在 React 16.8版本(引入钩子)之前,使用基于类的组件来创建需要维护内部状态或利用生命周期方法的组件(即componentDidMount和shouldComponentUpdate)。...}}函数组件是无状态的(同样,小于 React 16.8版本),并返回要呈现的输出。...函数组件:function Welcome(props) { return Hello, {props.name};}注意:在 React 16.8版本中引入钩子意味着这些区别不再适用

    1.1K20

    面试官最喜欢问的几个react相关问题

    一般可以用哪些值作为key最好使用每一条数据中的唯一标识作为key,比如:手机号,id值,身份证号,学号等也可以用数据的索引值(可能会出现一些问题)React 性能优化shouldCompoentUpdatepureComponent...然后 React Scheduler 会根据优先级高低,先执行优先级高的节点,具体是执行 doWork 方法。...(2)父组件传递给子组件方法的作用域是父组件实例化对象,无法改变。(3)组件事件回调函数方法的作用域是组件实例化对象(绑定父组件提供的方法就是父组件实例化对象),无法改变。...(1)当使用箭头函数作为map等方法的回调函数时,箭头函数的作用域是当前组件的实例化对象(即箭头函数的作用域是定义时的作用域),无须绑定作用域。(2)事件回调函数要绑定组件作用域。...react hooks,它带来了那些便利代码逻辑聚合,逻辑复用HOC嵌套地狱代替classReact 中通常使用 类定义 或者 函数定义 创建组件:在类定义中,我们可以使用到许多 React 特性,例如

    5K20

    2020 年你应该知道的 React 库

    当我从 Angular 切换到 React,我绝对经历了它作为 React 的优势。 只有通过 React,您才能使用函数组件和 props 构建组件驱动的用户界面。...如果你根本不想关心后端,以下三种解决方案可能适合你: Firebase Auth0 AWS Cognito 如果您正在寻找身份验证 + 数据库的一体化解决方案,请坚持使用 Firebase 或 AWS。...用于 React 的工具库 Javascript 为处理数组、对象、数字、对象和字符串提供了大量内置功能。...React 中最常用的 JavaScript 内置功能之一是内置 map() 数组。为什么?因为您总是必须呈现组件中的列表。...由于 JSX 是 HTML 和 JavaScript 的混合物,所以您可以使用 JavaScript 在数组上进行映射并返回 JSX。

    17.8K40

    React常见面试题

    react组件之前通讯主要要四种方式 父子组件:props,props回调 兄弟组件:共同父级,再由父节点转发props,props回调 跨级组件:context对象,注入全局变量:getChildContext...如果一个函数,接受一个或多个函数作为参数或者返回一个函数,就可称之为高阶函数 特点: 是函数 参数是函数 or 返回是函数 eg: array 对象中的 map,filter,sort方法都是高阶函数...react hook是v16.8的新特性; 传统的纯函数组件, react hooks设计目的,加强版的函数组件,完全不使用‘类’,就能写出一个全功能的组件,不能包含状态,也不支持生命周期), hook...,使用function代替class 缺点(坑): 【useState数组修改】使用useState修改array的值时,不要使用push/pop/splice等直接更改数据对象的方法,否则无法修改,应该使用解构或其他变量代替...hooks(本质是一类特殊的函数,可以为函数式注入一些特殊的功能)的主要api: 基础Hook: useState : 状态钩子,为函数组件提供内部状态 useEffect :副作用钩子,提供了类似于componentDidMount

    5.1K20

    常见react面试题

    ...store, dispatch } } } 从applyMiddleware中可以看出∶ redux中间件接受一个对象作为参数,对象的参数上有两个字段...>; } } 函数组件是无状态的(同样,小于 React 16.8版本),并返回要呈现的输出。...钩子函数中的是异步 原生事件中是同步 setTimeout中是同步 如何有条件地向 React 组件添加属性?...主要解决的问题: 单纯的Redux只是一个状态机,是没有UI呈现的,react- redux作用是将Redux的状态机和React的UI呈现绑定在一起,当你dispatch action改变state的时候...对React的插槽(Portals)的理解,如何使用,有哪些使用场景 React 官方对 Portals 的定义: Portal 提供了一种将子节点渲染到存在于父组件以外的 DOM 节点的优秀的方案 Portals

    3.8K40

    (Vue 小程序 css ES6 React 校招大厂真题、高级前端进阶等)

    Router:是路由实例对象,包括了路由跳转方法,钩子函数等。 11.vue中数据变了但是视图不跟新怎么解决? 原因: 1.数组数据变动:使用某些方法操作数组,变动数据时,有些方法无法被vue监测。...类组件和函数组件之间有什么区别? 类组件: 无论是使用函数或是类来声明一个组件,它决不能修改它自己的 props。 所有 React 组件都必须是纯函数,并禁止修改其自身 props。...函数组件: 函数组件接收一个单一的 props 对象并返回了一个React元素 函数组件的性能比类组件的性能要高,因为类组件使用的时候要实例化,而函数组件直接执行函数取返回结果即可。...React Hooks (1) Hook是React 16.8.0版本增加的新特性/新语法 (2) 可以让你在函数组件中使用 state 以及其他的 React 特性 优势: 1.函数组件无this问题...由于 props 是传入的,并且它们不能更改,因此我们可以将任何仅使用 props 的 React 组件视为 pureComponent,也就是说,在相同的输入下,它将始终呈现相同的输出。

    1.2K10

    前端-Vue超快速学习

    当你数据变化是异步或者开销较大时,可以使用 watch侦听器来响应数据的变化 v-bind:class的值可以是一个对象,可实现类似 react中 classnames模块的功能 自定义组件上的 class... v-if v-if和 v-for一起使用时, v-for的优先级更高 v-for可遍历数组,第二个参数是索引 v-for可遍历对象,第二个参数是 key,第三个参数是索引 v-for和 的类型 父级 props的更新会向下流动,反之则不行 由于JavaScript对象和数组是引用传入的,所以当子组件对props的改变将会影响到父组件 props类型校验可以是原生构造对象的中的任意一个... model属性自定义 父组件模板的所有东西都会在父级作用域内编译,子组件的所有内容都会在子组件作用域内编译 插槽( )/具名插槽(  以真实元素呈现,默认为 ,可使用tag更改呈现标签 过渡模式不可用 内部需要唯一 key 列表排序过渡,使用的是 FLIP动画,使用类名 v-move来定义class 可复用性 & 组合

    3.4K40

    你不知道的React 和 Vue 的20个区别【源码层面】

    不仅符合函数式编程的思想,让开发者写出没有副作用的函数,而且我们并不去修改组件状态,只是把要改变的状态和结果返回给React,维护状态的活完全交给React去做。...Vue的v-for 或 React 的map 中为什么不要用 index作为 key 6.1 为什么要加 key 6.1.1 React 1.上面的 5.1 讲到 React 的 differ 中 element...Vue 的data 必须是函数而 React 的 state 是对象 13.1 Vue 的 data 必须是函数 对象是引用类型,内存是存贮引用地址,那么子组件中的 data 属性值会互相污染,产生副作用...; 判断是否是对象的属性,直接赋值; 不是数组,且不是对象属性,创建一个新属性,不是响应数据直接赋值,是响应数据调用defineReactive; export function...,那么在非生产环境下会打印警告信息 // 这个api本来就是给对象与数组使用的 if (process.env.NODE_ENV !

    1.7K31

    社招前端react面试题整理5失败

    Keys 是 React 用于追踪哪些列表中元素被修改、被添加或者被移除的辅助标识。在 React 中渲染集合时,向每个重复的元素添加关键字对于帮助React跟踪元素与数据之间的关联非常重要。...很多时候你会使用数据中的 IDs 作为 keys,当你没有稳定的 IDs 用于被渲染的 items 时,可以使用项目索引作为渲染项的 key,但这种方式并不推荐,如果 items 可以重新排序,就会导致...(2)使用useState时候,使用push,pop,splice等直接更改数组对象的坑使用push直接更改数组无法获取到新值,应该采用析构方式,但是在class里面不会有这个问题。...}}函数组件是无状态的(同样,小于 React 16.8版本),并返回要呈现的输出。...即:Hooks 组件(使用了Hooks的函数组件)有生命周期,而函数组件(未使用Hooks的函数组件)是没有生命周期的。

    5.3K30

    React Hooks 学习笔记 | useEffect Hook(二)

    三、关于 [ ] 依赖数组参数的说明 在开篇的时候,我们使用 useEffect Hook 实现了 componentDidMount ,componentDidUpdate 两个生命钩子函数的一致的效果...但是还好, useEffect Hook 提供了依赖使用参数,第一个参数是定义方法,第二个参数是依赖数组,用于自定义依赖的参数,是否触发再次执行,接下来我们来看几个示例效果: 3.1、after every...(谷歌的产品,目前需要登陆国外网站才能使用,Firebase 是 Google Cloud Platform 为应用开发者们推出的应用后台服务。...,在 useEffect() 里添加历史购物清单的列表接口,用于显示过往的清单信息,这里我们使用 firebase 的提供的API, 请求 https://react-hook-update-350d4...5.4 、更新删除清单的方法 这里我们要改写删除清单的方法,将删除的数据更新到云端数据库 Firebase ,为了显示更新状态和系统的错误信息,这里我们引入 ErrorModal ,添加数据加载状态和错误状态

    10K30
    领券