首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

今年前端面试太难了,记录一下自己面试题

函数输入输出确定性 o useMemo 纯一个记忆函数 o useRef 返回一个可变ref对象,其Current 属性被初始化为传递参数,返回 ref 对象在组件整个生命周期内保持不变。...以javascript:开头URL 非常容易遭受攻击,造成安全漏洞。废弃"Factory"组件。 工厂组件导致 React 变大且变慢。...多次执行setState,批量执行具体表现为,多次同步执行setState,进行合并,类似于Object.assign,相同key,后面的覆盖前面的当遇到多个setState调用时候,提取单次传递...组件通讯: props+回调⽅式,⽗组件向⼦组件传递props进⾏通讯,此props为作⽤域为⽗组件⾃身函 数,⼦组件调⽤该函数,将⼦组件想要传递信息,作为参数,传递到⽗组件作⽤域中兄弟组件通信...里面的callback函数会在DOM更新完成后立即执行,但是会在浏览器进行任何绘制之前运行完成,阻塞了浏览器绘制.在 React 中,refs 作用是什么Refs 可以用于获取一个 DOM 节点或者

3.7K30

2023前端二面react面试题(边面边更)

state 更新流程: 这个过程当中涉及函数:shouldComponentUpdate: 组件 state 或 props 发生改变,都会首先触发这个生命周期函数。...Time Slicing、Suspense、 hooksTime Slicing(解决CPU速度问题)使得在执行任务期间可以随时暂停,跑去干别的事情,这个特性使得react能在性能极其差机器跑,...以javascript:开头URL 非常容易遭受攻击,造成安全漏洞。废弃"Factory"组件。 工厂组件导致 React 变大且变慢。...Refsref 返回值取决于节点类型: ref 属性被用于一个普通 HTML 元素,React.createRef() 将接收底层 DOM 元素作为 current 属性以创建 ref。... ref 属性被用于一个自定义类组件,ref 对象将接收该组件已挂载实例作为 current。当在父组件中需要访问子组件中 ref 可使用传递 Refs 或回调 Refs。

2.4K50
您找到你想要的搜索结果了吗?
是的
没有找到

怎样对react,hooks进行性能优化?

但同时函数组件使用也带来了一些额外问题:由于函数式组件内部状态更新重新执行一遍函数,那么就有可能造成以下两点性能问题:造成子组件非必要重新渲染造成组件内部某些代码(计算)重复执行好在 React...当你把 memolizedCallback 作为参数传递给子组件(被 React.memo 包裹过,它可以避免非必要子组件重新渲染。...包裹一层,以为这样可以通过避免函数重复生成优化性能,实则不然:首先,在 JS 内部函数创建是非常快,这点性能问题不是个问题(参考:React 官方文档:Hook 因为在渲染创建函数变慢吗?)...useCallback 正确使用场景函数组件内部定义函数需要作为其他 Hooks 依赖。函数组件内部定义函数需要传递给其子组件,并且子组件由 React.memo 包裹。...场景 1:useCallback 主要是为了避免组件重新渲染函数引用变动所导致其它 Hooks 重新执行,更为甚者可能造成组件无限渲染:import React, { useEffect, useState

2.1K51

几个你必须知道React错误实践

当我们选择多层传递导致一些性能问题,这也让 React 官方比较头疼。 props 透传导致不必要重新渲染。...因为它们也会被打包到运行时代码发送到用户客户端/浏览器/移动设备上。额外依赖导致应用体积膨胀,增加用户加载时间,让网页变慢,降低用户体验度。...}将组件和逻辑放到一起让组件变得复杂,修改或者增加业务逻辑,对开发者来说更加复杂,而且想了解整个流程也更加具有挑战性。...这是使用 React 编写组件核心原则之一,在编写 React 组件应该牢记在心。 同时意味着,在渲染组件时候重新执行某些逻辑。...而且当我们试图访问 props 上面不存在属性,会得到警告。10. 不对大型应用代码进行拆分大型应用意味着包含大量组件。

73740

useEffect() 与 useState()、props 和回调、useEffect 依赖类型介绍

它是一种存储数据方式,这些数据随着时间推移而变化,并根据任何变化导致重新呈现。它还允许您在组件中声明和更新一段本地状态。...useEffect 是另一个 React 函数,用于在功能组件中执行副作用。副作用包括数据获取、DOM 操作、设置订阅等。它允许您在初始呈现后运行代码,并响应状态或道具变化。...} ); } 需要与外界交互、处理异步操作或在组件卸载执行清理任务,UseEffect 非常有用。...props 在渲染组件定义,并作为 JSX 元素中属性传递。然后父组件设置并更新其子组件 props。...(code) }, [players]); 回调作为依赖项:您还可以在依赖项数组中包含回调函数。只要这些回调发生变化,效果就会运行,这对于处理基于回调变化副作用非常有用。

27130

几个你必须知道React错误实践_2023-02-27

当我们选择多层传递导致一些性能问题,这也让 React 官方比较头疼。 props 透传导致不必要重新渲染。...因为它们也会被打包到运行时代码发送到用户客户端/浏览器/移动设备上。额外依赖导致应用体积膨胀,增加用户加载时间,让网页变慢,降低用户体验度。... } 将组件和逻辑放到一起让组件变得复杂,修改或者增加业务逻辑,对开发者来说更加复杂,而且想了解整个流程也更加具有挑战性。...这是使用 React 编写组件核心原则之一,在编写 React 组件应该牢记在心。 同时意味着,在渲染组件时候重新执行某些逻辑。...而且当我们试图访问 props 上面不存在属性,会得到警告。 10. 不对大型应用代码进行拆分 大型应用意味着包含大量组件。

73240

前端react面试题合集_2023-03-15

什么是装饰者模式:在不改变对象自身前提下在程序运行期间动态给对象添加一些额外属性或行为可以提高代码复用性和灵活性。...react 最新版本解决了什么问题,增加了哪些东西React 16.x三大新特性 Time Slicing、Suspense、 hooksTime Slicing(解决CPU速度问题)使得在执行任务期间可以随时暂停...以javascript:开头URL 非常容易遭受攻击,造成安全漏洞。废弃"Factory"组件。 工厂组件导致 React 变大且变慢。...在父组件中用useState声明数据 const [ data, setData ] = useState(false)把更新数据函数传递给子组件...甚至可以增加更多state项,但是非常不建议这么做因为这可能导致state难以维护及管理。

2.8K50

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

什么是上下文ContextContext 通过组件树提供了一个传递数据方法,从而避免了在每一个层级手动传递 props 属性。... )};在集合中添加和删除项目,不使用键或将索引用作键导致奇怪行为。...很多时候你会使用数据中 IDs 作为 keys,当你没有稳定 IDs 用于被渲染 items ,可以使用项目索引作为渲染项 key,但这种方式并不推荐,如果 items 可以重新排序,就会导致...多次执行setState,批量执行具体表现为,多次同步执行setState,进行合并,类似于Object.assign,相同key,后面的覆盖前面的当遇到多个setState调用时候,提取单次传递...执行,遵守先清理后更新) // 以及 componentWillUnmount 执行内容 } // 函数中 Cleanup 函数按照在代码中定义顺序先后执行,与函数本身特性无关

4.6K30

React Hooks 性能优化,带你玩转 Hooks

举个例子: 现在有个父子组件,子组件依赖父组件传入name属性,但是父组件name属性和text属性变化都会导致Parent函数重新执行,所以即使传入子组件props没有任何变化,甚至子组件没有依赖于任何...包含函数,父组件每次重新渲染都是创建新函数,所以传递函数子组件还是重新渲染,即使函数内容还是一样。...如何解决这一问题,我们希望把函数也缓存起来,于是引入useCallback useCallback useCallback用用于缓存函数,只有当依赖项改变函数才会重新执行返回新函数,对于父组件中函数作为...props传递给子组件,只要父组件数据改变,函数重新执行作为props函数产生新实例,导致子组件刷新 使用useCallback可以缓存函数。...count和price,但是由于color变化,DOM重新渲染也导致函数执行,useMemo便是用于缓存该函数执行结果,仅依赖项改变后才会重新计算 const Parent = () =>

1.5K30

关于前端面试你需要知道知识点

那为什么不要在循环、条件或嵌套函数中调用 Hook 呢?因为 Hooks 设计是基于数组实现。在调用时按顺序加入数组中,如果使用循环、条件或嵌套函数很有可能导致数组取值错位,执行错误 Hook。...执行,遵守先清理后更新) // 以及 componentWillUnmount 执行内容 } // 函数中 Cleanup 函数按照在代码中定义顺序先后执行,与函数本身特性无关...很多时候你会使用数据中 IDs 作为 keys,当你没有稳定 IDs 用于被渲染 items ,可以使用项目索引作为渲染项 key,但这种方式并不推荐,如果 items 可以重新排序,就会导致...,多次执行setState,批量执行 具体表现为,多次同步执行setState,进行合并,类似于Object.assign,相同key,后面的覆盖前面的 遇到多个setState调用时候,提取单次传递...在父组件中用useState声明数据 const [ data, setData ] = useState(false) 把更新数据函数传递给子组件 <Child setData={setData

5.4K30

一道React面试题把我整懵了

data为null,此时我们期望是不会重复渲染,然而当我们Test组件有状态更新,触发了Test重新渲染,此时render执行,List依旧重新渲染。...原因就是我们每次执行render,传递给子组件options,onSelect是一个新对象/函数。这样在做shallowEqual认为有更新,所以更新List组件。...函数中减少类似onClick={() => {doSomething()}}写法,每次调用render函数均会创建一个新函数,即使内容没有发生任何变化,也导致节点没必要重渲染,建议将函数保存在组件成员对象中...以javascript:开头URL 非常容易遭受攻击,造成安全漏洞。废弃"Factory"组件。 工厂组件导致 React 变大且变慢。...执行,遵守先清理后更新) // 以及 componentWillUnmount 执行内容 } // 函数中 Cleanup 函数按照在代码中定义顺序先后执行,与函数本身特性无关

1.1K40

React Hooks - 缓存记忆

如果您确定了渲染速度较慢场景,那么使用缓存记忆可能是最好选择。 React.memo是一个性能优化工具,也是一个高级组件。它类似于React.PureComponent,但用于函数组件而不是类。...如果您函数组件在相同Props属性下呈现相同结果,React将会使用缓存,跳过这次渲染,并重用最后一次渲染结果。 默认情况下,它将仅对props对象中复杂对象进行浅层比较。...如果要控制比较,还可以提供自定义比较功能作为第二个参数。 不使用缓存记忆 让我们看一个不使用缓存记忆示例,和理解为什么这会导致性能问题。...需要注意是,将回调函数传递给已记忆组件可能导致细微错误。...每次按inc都会调用renderList。useCallback默认行为是在传递函数实例时计算新值。

3.5K10

React报错之Too many re-renders

函数是在页面加载立即被调用,而不是事件触发后调用。 传递函数 为了解决该错误,为onClick事件处理器传递函数,而不是传递调用函数结果。...React limits the number of renders to prevent an infinite loop"错误也会在使用useEffect方法发生,该方法依赖导致无限重新渲染。...这意味着该钩子会在每次渲染时运行,它会更新组件状态,然后无限重新运行传递依赖 解决该错误一种办法是,为useEffect提供空数组作为第二个参数。...另一个解决方案是将对象属性传递给依赖数组。...我们传递给useMemo钩子第二个参数是一个依赖数组,它决定了我们传递给useMemo回调函数何时被重新运行。 需要注意是,数组在JavaScript中也是通过引用进行比较

3.2K40

超实用 React Hooks 常用场景总结

5、模拟 componentDidMount 如果想只运行一次 effect(仅在组件挂载和卸载执行),可以传递一个空数组([ ])作为第二个参数,如下所示,原理跟第 4 点性能优化讲述一样;...); }; const MemoChildComp = memo(ChildComp); 六、useMemo 假设以下场景,父组件在调用子组件传递 info 对象属性,点击父组件按钮...,导致传递给子组件 info 属性值变化,进而导致子组件重新渲染。...解决: 使用 useMemo 将对象属性包一层,useMemo 有两个参数: 第一个参数是个函数,返回对象指向同一个引用,不会创建新对象; 第二个参数是个数组,只有数组中变量改变,第一个参数函数才会返回一个新对象...state 值),进而导致父组件重新渲染;父组件重新渲染重新创建 changeName 函数,即传给子组件 changeName 属性发生了变化,导致子组件渲染; 解决: 修改父组件 changeName

4.6K30

一文总结 React Hooks 常用场景

5、模拟 componentDidMount 如果想只运行一次 effect(仅在组件挂载和卸载执行),可以传递一个空数组([ ])作为第二个参数,如下所示,原理跟第 4 点性能优化讲述一样;...); }; const MemoChildComp = memo(ChildComp); 六、useMemo 假设以下场景,父组件在调用子组件传递 info 对象属性,点击父组件按钮,...,导致传递给子组件 info 属性值变化,进而导致子组件重新渲染。...解决: 使用 useMemo 将对象属性包一层,useMemo 有两个参数: 第一个参数是个函数,返回对象指向同一个引用,不会创建新对象; 第二个参数是个数组,只有数组中变量改变,第一个参数函数才会返回一个新对象...state 值),进而导致父组件重新渲染;父组件重新渲染重新创建 changeName 函数,即传给子组件 changeName 属性发生了变化,导致子组件渲染; 解决: 修改父组件 changeName

3.5K20

React进阶篇(十)性能优化

代码上优化 列表项定义key属性 不推荐用索引作为key,因为一旦列表中数据发生重排,数据索引也会发生变化 key只要不在当前列表中重复即可 组件属性值尽量不要用内联函数,如<Com1 action...因为如果style里直接定义样式对象,导致组件每次渲染都要创建一个新style对象。...,利用useCallback缓存函数 // useMemo // 使用useMemo来执行昂贵计算,然后将计算值返回,并且将count作为依赖值传递进去。...,然后把这个函数作为props传递给子组件; // 这样,子组件就能避免不必要更新。...组件状态都是不可变对象,shouldComponentUpdate只需浅比较就可以判断状态是否真的改变,从而避免不必要render调用。

78620

前端常见react面试题合集

这个方法会在组件第一次“挂载”(被添加到 DOM)执行,在组件生命周期中仅执行一次。...Redux内部原理 内部怎么实现dispstch一个函数以redux-thunk中间件作为例子,下面就是thunkMiddleware函数代码// 部分转为ES5代码,运行middleware函数返回一个新函数...可以渲染一个,一个渲染,它将使用它to属性进行定向。...、 hooksTime Slicing(解决CPU速度问题)使得在执行任务期间可以随时暂停,跑去干别的事情,这个特性使得react能在性能极其差机器跑,仍然保持有良好性能Suspense (解决网络...以javascript:开头URL 非常容易遭受攻击,造成安全漏洞。废弃"Factory"组件。 工厂组件导致 React 变大且变慢

2.4K30

React 设计模式 0x3:Ract Hooks

useEffect 有两个参数(箭头函数和可选依赖项数组),用于异步操作。 依赖项数组是可选,不传入数组,回调函数会在每次渲染后执行,传入空数组,回调函数只会在组件挂载和卸载执行。...可用于性能优化,因为它会缓存计算出值,并在依赖项数组中值不改变返回该值。如果这些值发生变化,那么 useMemo 就会重新运行,然后返回新计算出值。...在 React 中,父组件重新渲染,所有的子组件也重新渲染。如果子组件某个函数作为 props 传递给子组件,而父组件重新渲染,这个函数会被重新创建。...这可能导致不必要渲染,因为即使没有必要更新组件,子组件也重新渲染。这时就可以使用 useCallback 来优化性能。 useCallback 接收两个参数:回调函数和一个依赖项数组。...依赖项数组中任何一个值发生变化时,回调函数就会重新生成。这意味着 useCallback 返回函数传递给子组件,只有在依赖项变化时才会重新生成。

1.5K10
领券