首页 > 其他分享 >React面试题

React面试题

时间:2024-05-28 09:02:16浏览次数:22  
标签:状态 面试题 函数 render React props 组件

1. 什么是React?它的特点是什么?

  React是一个用于构建用户界面的JavaScript库。其特点包括:

  • 使用虚拟DOM实现高效更新
  • 组件化开发,提高代码重用性和可维护性
  • 单向数据流,简化状态管理
  • JSX语法,将组件结构和逻辑放在一起
  • 生态系统丰富,支持各种工具和库

2. 什么是JSX?

JSX是一种JavaScript的语法扩展,用于在React中编写UI组件。它看起来类似于HTML,但实际上是JavaScript。JSX使得在JavaScript代码中直接编写UI组件更加直观和简洁。

3. 什么是组件?类组件和函数组件有什么区别?

组件是React应用的构建块,用于封装UI元素及其功能。类组件是通过ES6中的class语法定义的组件,拥有状态和生命周期方法。函数组件是无状态的组件,通过函数声明定义,通常用于简单的UI呈现。

4. 什么是状态(state)和属性(props)在React中的作用?

  • 状态(state): 是组件内部的数据,可以随着时间的变化而变化。通过调用setState方法来更新状态,触发UI的重新渲染。
  • 属性(props):从父组件传递给子组件的数据,props是只读的,子组件不能直接修改props。组件接收props后可以根据props渲染不同的内容。

5. React组件之间如何通信?

1.父传子 :props;    2.子传父:props+回调的方式; 3.兄弟组件:父组件作为中间层拉实现数据互通;
4.跨层级:Context;  5.发布订阅模式:event;          6.全局状态管理:Redux

6. 何时用类组件( Class Component)?何时用功能组件(Functional Component)?

如果组件具有状态( state)或生命周期方法,请使用类组件;否则,使用功能组件。
其他:setState在react18之后都会表现为异步;创建一个异步函数(async...await 的方式)可支持 useEffect ;
memo 组件的 props 没有变化时,会直接复用组件的渲染结果,从而避免不必要的渲染。,为了避免不必要的计算,我们可以使用 useMemo 来缓存计算结果

 

7. React Router组件有哪些?

 1.BrowserRouter、HashRouter : 路由模式history,hash
 2.route: Route用于路径的匹配,然后进行组件的渲染
 3.Link、NavLink:通常路径的跳转是使用Link组件 NavLink是在Link基础之上增加了一些样式属性,例如组件被选中时,发生样式变化 ( activeStyle , activeClassName )
 4.redirect:路由重定向
 5.switch:swich组件的作用适用于当匹配到第一个组件的时候,后面的组件就不应该继续匹配。

8. react有状态组件和无状态组件的区别与使用场景?

1.有状态组件(Stateful Component):
使用类组件定义,内部包含了状态(state),可以管理自身的状态。
使用this.state和this.setState管理状态。
适合需要管理或者响应状态变化的场景。
2.无状态组件(Stateless Component):
使用函数组件定义,不包含状态,仅根据传入的props渲染输出。
适合那些不需要管理状态、只根据外部数据渲染的场景。

9. 对Redux中间件的理解?原理?常用中间件有哪些?

Redux中,中间件就是放在就是在dispatch过程,在分发action进行拦截处理, 其本质上一个函数,对store.dispatch方法进行了改造,在发出 Action 和执行 Reducer 这两步之间,添加了其他功能。
实现原理:
applyMiddlewares的源码 中我们可以看到 ,所有中间件被放进了一个数组chain,然后嵌套执行,最后执行store.dispatch。可以看到,中间件内部(middlewareAPI)可以拿到getState和dispatch这两个方法
常用中间件:
redux-thunk:用于异步操作
redux-logger:用于日志记录

10. react生命周期?

a.组件挂载时
   当组件实例被创建并插入DOM时,其生命周期调用顺序如下:

   constructor()
   static getDerivedStateFromProps()
   render()
   componentDidMount()

b.组件更新时
   当组件的props或state发生变化时会触发更新。组件更新的生命周期调用顺序如下:

   static getDerivedStateFromProps()
   shouldComponentUpdate()
   render()
   getSnapshotBeforeUpdate()
   componentDidUpdate()

c.组件卸载时
   当组件从DOM中移除时会调用如下方法

   componentWillUnmount()

11. React render方法的原理,在什么时候会触发?

原理:
在类组件中render函数指的就是render方法;而在函数组件中,指的就是整个函数组件
render函数中的jsx语句会被编译成我们熟悉的js代码,在render过程中,react将新调用的render函数返回的树与旧版本的树进行比较,这一步是决定如何更新 DOM 的必要步骤,然后进行 diff 比较,更新dom树
触发机:
类组件调用 setState 修改状态
函数组件通过useState hook修改状态
一旦执行了setState就会执行render方法,useState 会判断当前值有无发生改变确定是否执行render方法,一旦父组件发生渲染,子组件也会渲染。

12. React Hooks 在使用上有哪些限制?

  • 不要在循环、条件或嵌套函数中调用 Hook;
  • 在 React 的函数组件中调用 Hook。

13. 什么是React Hook?有哪些常用的Hook?

 React Hook是React 16.8引入的功能,用于在无需编写类的情况下使用状态和其他React特性。常用的Hook包括:useStateuseEffectuseContextuseReduceruseMemouseCallback等。

  • useState:用于管理功能组件中的状态。
  • useEffect:用于在功能组件中执行副作用,例如获取数据或订阅事件。
  • useContext:用于访问功能组件内的 React 上下文的值。
  • useRef:用于创建对跨渲染持续存在的元素或值的可变引用。
  • useCallback:用于记忆函数以防止不必要的重新渲染。
  • useMemo:用于记忆值,通过缓存昂贵的计算来提高性能。
  • useReducer:用于通过reducer函数管理状态,类似于Redux的工作原理。
  • useLayoutEffect:与useEffect类似,但效果在所有DOM突变后同步运行。

14. usecallback,usememo区别?

useCallback 用于缓存函数,以避免不必要的函数创建和渲染。当依赖项发生变化时,会返回一个新的函数引用,否则直接返回之前缓存的函数引用。
useMemo 用于缓存计算结果,以避免重复计算和渲染。当依赖项发生变化时,会重新计算并返回新的计算结果。

15. 什么是虚拟DOM?它的作用是什么?

虚拟DOM是React使用的一种技术,它是React元素的内存表示,与真实DOM对应。React通过比较虚拟DOM的变化来最小化DOM操作,从而提高性能。

https://blog.csdn.net/jyl919221lc/article/details/130285333

标签:状态,面试题,函数,render,React,props,组件
From: https://www.cnblogs.com/fmj521/p/18217041

相关文章

  • 4 React Router
    一环境搭建npxcreate-react-appreact-router-pronpmireact-router-dom普通版: 抽象后: 二路由导航2.1两种方式 2.2参数传递路径传参和拼接传参数,路径的时候注意再路由处配置参数名2.3嵌套路由实现步骤:1、使用children属性配置路由嵌套关系,两种路由模式......
  • 2024最全java面试题整理(持续更新)
    1.springboot项目和maven项目的区别?(1)打包方式:传统项目如果需要打成war包,需要在WEB-INF目录结构配置web.xml文件;springboot则不需要(2)项目启动方式:传统web项目启动方式:在eclipse和tomcat插件中导入项目,然后启动tomcat,项目也启动了。或者将项目打成war包,放入tomcat中,启动tomca......
  • 赶紧收藏!2024 年最常见 20道 Redis面试题(九)
    上一篇地址:赶紧收藏!2024年最常见20道Redis面试题(八)-CSDN博客十七、如何使用Redis做异步队列?使用Redis作为异步队列主要依赖于Redis的列表(list)数据结构,列表提供了原子的推入(push)和弹出(pop)操作,这使得它非常适合实现队列。以下是使用Redis实现异步队列的步骤:准备Red......
  • react解决电脑分辨率及缩放导致页面变形的问题
    此处借鉴Vue3解决电脑分辨率及缩放导致页面变形的问题-CSDN博客:新建devicePixelRatio.js:/***@description校正windows页面在系统进行缩放后导致页面被放大的问题,通常放大比例是125%、150%***/classDevicePixelRatio{ constructor(){ } //获取系统类型 _get......
  • C++程序分享--常见算法/编程面试题:(百度笔试题)用 C 语言实现函数 void * memmove
    关注我,持续分享逻辑思维&管理思维&面试题;可提供大厂面试辅导、及定制化求职/在职/管理/架构辅导;有意找工作的同学,请参考博主的原创:《面试官心得--面试前应该如何准备》,《面试官心得--面试时如何进行自我介绍》, 《做好面试准备,迎接2024金三银四》。【图解《程序员面试常见的......
  • 【开源】史上最全的JAVA面试题总结
    史上最全的JAVA面试题总结为什么要做这件事情前言JAVA基础开发框架springSpringMVCmybatisdubbospringbootspringcloudnacos数据库mysqloracle缓存redismongodbElasticSearch消息队列rabbitmqrocketmqkafka监控prometheusgraylogzabbix工具篇tcpdumpgitjenkins容器......
  • react focus 事件
    reactfocus事件react官网中说:“在React中所有事件都会传播,除了onScroll,它仅适用于你附加到的JSX标签。”https://react.docschina.org/learn/responding-to-events#event-propagation那focus事件呢,原生focus事件可是非冒泡的functionMyInput(){functionhand......
  • react 脚手架
    react脚手架create-react-app(v5.0.1)临时安装create-react-app(node>14),通过create-react-app创建一个纯前端react项目npxcreate-react-appapp_01完成后package.json内容{"dependencies":{"@testing-library/jest-dom":"^5.17.0",......
  • Spring Cloud 面试题(五)
    1.Eureka的自我保护模式是什么?Eureka的自我保护模式是一种应对网络异常的安全保护措施,旨在防止因网络分区或其他异常情况导致服务实例被错误地注销。当EurekaServer在短时间内丢失过多的客户端心跳时,会触发自我保护机制。以下是自我保护模式的几个关键点[40][41][46]:触......
  • Spring Cloud 面试题(六)
    1.Nginx与Ribbon的区别Nginx与Ribbon都是负载均衡器,但它们在设计定位、工作方式以及使用场景上存在一些区别:定位与角色:Nginx是一个通用的反向代理服务器,主要作为服务端的负载均衡器和反向代理,位于客户端和后端服务器之间。它通常以独立的服务器程序运行,可以作为独立的......