From 9dae623c069b13ac264c891b76fb6b1603711cd2 Mon Sep 17 00:00:00 2001 From: joy <1519105541@qq.com> Date: Wed, 24 Apr 2024 14:18:07 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...\345\271\2643\346\234\2104\345\217\267.md" | 3 +- ...345\271\2644\346\234\21024\345\217\267.md" | 438 ++++++++++++++++++ 2 files changed, 439 insertions(+), 2 deletions(-) create mode 100644 "docs/\351\235\242\350\257\225\345\244\215\347\233\230/2024\345\271\2644\346\234\21024\345\217\267.md" diff --git "a/docs/\351\235\242\350\257\225\345\244\215\347\233\230/2024\345\271\2643\346\234\2104\345\217\267.md" "b/docs/\351\235\242\350\257\225\345\244\215\347\233\230/2024\345\271\2643\346\234\2104\345\217\267.md" index 13176b57..d70ff810 100644 --- "a/docs/\351\235\242\350\257\225\345\244\215\347\233\230/2024\345\271\2643\346\234\2104\345\217\267.md" +++ "b/docs/\351\235\242\350\257\225\345\244\215\347\233\230/2024\345\271\2643\346\234\2104\345\217\267.md" @@ -531,8 +531,7 @@ React 想看下现在用这种方式能走多远,如果这种方式不理想 - 通过 Fiber 架构, React 可以根据任务的优先级动态地调整任务的执行顺序,从而更好地控制 JavaScript 的执行。这使得 React 应用程序可以在不阻塞主线程的情况下进行虚拟 DOM diff,减少页面的卡顿和提高用户体验。 -- 总而言之, Fiber 是 React 中一种新的架构,用于实现增量式的、可中断的虚拟 DOM diff 过程。 -它通过将 diff 过程分为多个小任务,并根据优先级动态地调整任务的执行顺序,提高 React 应用程序的性能和响应性。 +- 总而言之, Fiber 是 React 中一种新的架构,用于实现增量式的、可中断的虚拟 DOM diff 过程。它通过将 diff 过程分为多个小任务,并根据优先级动态地调整任务的执行顺序,提高 React 应用程序的性能和响应性。 ## 10. Fiber 架构 diff --git "a/docs/\351\235\242\350\257\225\345\244\215\347\233\230/2024\345\271\2644\346\234\21024\345\217\267.md" "b/docs/\351\235\242\350\257\225\345\244\215\347\233\230/2024\345\271\2644\346\234\21024\345\217\267.md" new file mode 100644 index 00000000..633e9cc0 --- /dev/null +++ "b/docs/\351\235\242\350\257\225\345\244\215\347\233\230/2024\345\271\2644\346\234\21024\345\217\267.md" @@ -0,0 +1,438 @@ +# 4 月 24 号面试题 + +## 深圳中科德能(复试) + +## 1. 什么是 React? + +React + +- 基于状态的声明式渲染 +- 支持组件化开发 + +React 是用于构建用户界面的 JavaScript 库,只提供了 UI 层面的解决方案。 + +遵循组件设计模式、声明式编程范式和函数式编程概念,以使前端应用程序更高效。 + +使用虚拟 DOM 来有效的操作 DOM,遵循从高阶组件到低阶组件的单向数据流。 + +将页面划分成了各个独立的小块,每一个块就是组件,这些组件之间可以组合、嵌入,构成整体页面。 + +react 类组件使用名为 render() 的方法或者函数组件 return,接收输入的数据并返回需要展示的内容。 + +## 2. React 中的状态 + +状态(state):React 组件的可变数据,用于存储组件内部的状态信息。状态可以通过 setState 方法进行更新,并且只能在组件内部访问和修改。 + +## 3. React 中的 props + +是 React 组件的外部输入,用于传递数据和配置信息给组件。属性是可变的,只能由父组件传递给子组件,子组件不能直接修改父组件传递的属性。 + +## 4. 受控组件和非受控组件 + +受控组件:是由 React 控制并管理其内部状态的组件。它的状态通过 props 传递给子组件,并通过事件处理程序进行更新。受控组件提供了更精确的控制和验证,但需要更多的代码来处理状态更新。 + +非受控组件:是由组件本身管理其内部状态的组件。它的状态通常通过 ref 从 DOM 获取,并且不依赖于 React 来处理状态的更新。非受控组件通常在处理表单和第三方 DOM 集成时使用。 + +## 5. React 中的合成事件 + +React 合成事件是指将 原生事件合成一个 React 事件,之所以要封装自己的一套事件机制,目的是为了实现全浏览器的一致性,抹平不同浏览器之间的差异性。比如原生 onclick 事件对应 React 中的 onClick 合成事件。 + +``` +onclick => onClick; +onfoucs => onFoucs; +onblur => onBlur; +``` + +更多文章:[浅谈 React 合成事件](https://juejin.cn/post/6991645668934680584) + +## 6. React 中 key + +识别每个列表项的唯一性,提高列表更新的性能,保持元素的稳定性 + +React 可以根据 key 来跟踪列表中的每个元素,从而准确的识别出每个元素需要进行什么样的渲染,是新添加的还是删除的,是已存在的还是已删除的。 + +## 7. React 中的虚拟 DOM + +虚拟 DOM 最早是由 React 团队提出来的,是一种编程思想,指的是针对真实 UI DOM 的一种描述能力。在 React 中,使用了 JS 对象来描述真实的 DOM 结构。虚拟 DOM 和 JS 对象之间的关系:前者是一种思想,后者是一种思想的具体实现。 + +在 React 中通过 JSX 来描述 UI,JSX 仅仅是一个语法糖,会被 Babel 编译为 createElement 方法的调用。该方法调用之后会返回一个 JSX 对象,该对象就是虚拟 DOM 对象,官方更倾向于称之为一个 React 对象。 + +优点: +减少实际的 dom 操作 +批量更新 +跨平台的兼容性 +更好的开发体验 + +## 8. 什么是高阶组件 + +高阶组件是一种函数,接受一个组件作为参数并返回一个新的组件。高阶组件可以用于封装通用的逻辑和行为,以便在多个组件中重复使用。 + +可以用于实现组件的复用、逻辑的抽象和代码的组合 + +## 9. 常用的 hooks + +## 10. useEffect 可以接受哪些参数,分别有什么作用? + +- 方式一:useEffect(effect, [deps]) + +- effect:一个回调函数,在组件挂载、更新和卸载时执行。 +- deps:一个数组,指定 effect 的依赖项。当依赖项发生变化时,effect 会重新执行。 + +## 11. ref 的作用 + +ref 是用于访问组件或 DOM 元素的方法 + +- 访问组件实例:通过 ref 可以获取到组件的实例,从而可以直接调用组件的方法或访问组件的属性。 +- 访问 DOM 元素:通过 ref 可以获取到 DOM 元素。从而直接操作 DOM。 + +使用场景: +处理焦点、文本控制或媒体控制 +触发强制动画 +集成第三方 DOM 库 + +## 12. input 聚焦的方法是否可以用 ref 实现 + +可以 + +## 13. 深浅拷贝是什么?怎么实现深拷贝? + +浅拷贝: + +浅拷贝是指创建新的数据,这个数据有着原始数据属性值的一份精确拷贝 + +如果属性是基本数据类型,拷贝的是值,如果是引用数据类型,拷贝的是内存地址 + +浅拷贝是拷贝一层,深层次的引用数据类型则共享内存地址 + +深拷贝: + +深拷贝开辟一个新的栈,两个对象属性完全相同,但是对应两个不同的地址,修改一个对象的属性,不会改变另一个对象的属性。 + +实现深拷贝的方法: + +1. JSON.parse(JSON.stringify(obj)) + +2. lodash 的 cloneDeep 方法 + +3. 手动遍历对象或数组,逐个赋值(循环递归) + +## 14. 怎么样有条件的渲染组件 + +- 方式一:和 js 中一样是用 if else 语句。 + +```jsx +function MyComponent() { + const isLogin = Math.random() > 0.5; + if (isLogin) { + return
`, `