react框架

71 阅读5分钟

react框架问题

1对react的理解-是什么 特性及 优势

是一个js框架 提供ui层面的解决方案 特性:

  1. 声明式编程:React采用声明式编程,开发者只需要关注UI的展示,而无需关心具体的实现细节。
  2. 组件化:React将UI拆分成多个组件,每个组件都有自己的状态和属性,可以复用和组合。
  3. 虚拟DOM:React使用虚拟DOM来提高性能,通过比较虚拟DOM和真实DOM的差异,只更新变化的部分,从而减少DOM操作的开销。
  4. 生命周期:React组件有生命周期方法,可以在组件的不同阶段执行特定的操作,如初始化、更新、销毁等。
  5. 事件处理:React使用合成事件来处理DOM事件,可以跨浏览器兼容,并且可以方便地绑定和解绑事件。
  6. 数据绑定:React使用单向数据流,通过props和state来管理组件的数据,可以避免数据混乱和状态不一致的问题。

react16.8后增加了hooks用法

2state和props区别

state 是组件内部的状态,由组件自己管理
props 是组件外部传入的数据,由父组件传递给子组件,子组件不能修改 props 的值,只能通过父组件来修改。
相同点:
• 两者都是 JavaScript 对象 • 两者都是⽤于保存信息
• props 和 state 都能触发渲染更新
区别:
• props 是外部传递给组件的,⽽ state 是在组件内被组件⾃⼰管理的,⼀般在 constructor 中初始 化
• props 在组件内部是不可修改的,但 state 在组件内部可以进⾏修改
• state 是多变的、可以修改

react组件通信

父组件向子组件通信:通过 props 传递数据
子组件向父组件通信:通过回调函数传递数据

react16.8之后 没有生命周期的概念用useState替代

3 super

constructor中必须使用super, 因为子类没有自己的this对象,必须通过super来调用父类的构造函数, 从而初始化this对象。 在调⽤ super 过程,⽆论是否传⼊ props , React 内部都会将 porps 赋值给组件实例 porps 属性中的值,在组件内部通过 this.props 访问

4类组件和函数组件的区别

类组件:使用 ES6 的 class 关键字定义组件,有生命周期方法,
可以定义 state 和 props,适合复杂组件的开发。
在组件中必须实现 render ⽅法,在 return 中返回 React 对象
如果想要访问⽗组件传递过来的参数,可通过 this.props 的⽅式去访问
函数组件:使用函数定义组件,没有生命周期方法,不能定义 state,
函数第⼀个参数为 props ⽤于接收⽗组件传递过来的参数
但可以使用 hooks 来管理状态,适合简单组件的开发。\

5 受控组件和非受控组件

受控组件:表单数据由 React 组件来管理,表单数据保存在组件的 state 中,
通过 onChange 事件来更新 state,然后通过 state 来更新表单的值。
非受控组件:表单数据由 DOM 元素来管理,
表单数据保存在 DOM 元素中,通过 ref 来访问表单的值。

6 react事件机制

React 事件机制是 React 对原生事件的一种封装,React 事件机制与原生事件机制相似,
但有一些不同之处。 React 事件机制的主要特点如下:
React 事件机制是合成事件机制,React 事件机制与原生事件机制相似,但有一些区别
事件名称命名方式不同 React 事件名称采用驼峰命名法,例如 onClick,而原生事件名称采用全小写,例如 click
事件处理函数书写不同 React 事件处理函数采用箭头函数或 bind 方法绑定 this,而原生事件处理函数采用字符串形式
获得原生dom事件 通过e.nativeEvent属性获取

7 异步编程

实现异步编程的方式有很多种,其中比较常见的是回调函数、Promise 和 async/await。
Promise 是 ES6 中引入的一种新型异步编程模式,通过链式调用 then 方法,每一步都返回一个 Promise 对象,从而避免了回调地狱的问题。
假设我们需要通过 Promise 请求 api 获取数据, 定义了一个 getData 函数来获取数据,并使用 Promise 包裹了它。如果我们需要进一步处理返回的数据,可以通过链式调用 then 方法来处理。
例如:
getData().then(function(data) { console.log(data); });

尽管 Promise 已经解决了回调地狱的问题,但是它仍然有一些限制。
首先,我们需要手动创建一个 Promise 对象,而且会导致代码变得冗长。其次,在较老的浏览器中,Promise 也不一定能够工作,尤其在 IE 等浏览器中兼容性并不好。 async/await async/await是 ES8 中引入的异步编程模式,本质上也是基于 Promise 的。async 表示该函数返回一个 Promise 对象,而 await 关键词是用来等待一个 Promise 对象的结果。
在使用 async/await 编写异步代码时,我们不再需要手动创建和管理 Promise 对象,而是通过 async 关键字将其转换为异步函数。以下是一个简单的例子:
async function getData() { const data = await $.get('/api/data'); return data; }

在这个例子中,我们使用了 async/await 来等待 api 请求完成后获取数据。await $get('/api/data') 这行代码会阻塞代码执行,
直到请求返回数据才会继续执行接下来的代码。 虽然 async/await 看起来更简洁,但是它仍然依赖于 Promise,并不能解决 Promise 无法兼容早期浏览器的问题。
此外,如果错误处理不当,async/await 可能会使应用程序变得混乱并且难以维护。所以在使用 async/await 时一定要注意错误处理。