useEffect模拟的生命周期钩子函数有什么
componentDidMount,componentWillUnmount和componentDidUpdate
react中的高阶组件
官方的定义:高阶组件是参数为组件,返回值为新组件的函数;
组件是将 props 转换为 UI,而高阶组件是将组件转换为另一个组件;
高阶组件并不是React API的一部分,它是基于React的 组合特性而形成的设计模式;
高阶组件在一些React第三方库中非常常见: 比如redux中的connect;react-router中的withRouter;
路由守卫
使用场景:我们在进行项目的实际开发中,可能会遇到一个问题:“如果我们没有登录的时候一些页面不能被访问该怎么去处理?”,这时候就需要我们的路由守卫了!
beforeEach (全局前置守卫)三个:from,to,next。
to:to 表示去往哪个路由
from:from 表示从哪个路由离开
next: next 是一个方法,代表的是是否展示路由页面,如果不使用next方法,那么指定页面无法显示
router.beforeEach((to,from,next)=>{
next()
})
- 实战场景: 在进行登录权限时候进行使用,非常好用!!!
beforeEnter (路由独享守卫)
beforeEnter:((to,from,next)=>{
// next()
if (!localStorage.getItem('token')) {
if (to.name === 'home') {
next()
}
else {
router.push('/home/articleList')
}
} else {
next()
}
})
- 路由独享守卫配置在路由js文件中的每一个独立路由配置项中
beforeRouteEnter (组件内部守卫)
const Foo = {
template: `...`,
beforeRouteEnter(to, from, next) {
// 不能获取组件实例
// 因为当守卫执行前,组件实例还没被创建
}
- 你要设置的组件内部使用,和data同级
路由守卫能够帮助我们判断用户的登录状态,从而对用户未登录时做一些限制,
箭头函数和普通函数的区别
- 书写:箭头函数比普通函数更加简洁,而且在一定程度上可以简写,比如,括号里面只有一个参数,括号可以省略, 另外如果函数体中只有一行代码,花括号也可以省略。
- 参数:箭头函数不能重复参数名称;
- this指向:普通函数的this指向的是谁调用该函数就指向谁。箭头函数的this指向的是在你书写代码时候的上下文环境对象的this,如果没有上下文环境对象,那么就指向最外层对象window(call,apply,bind无法改变箭头函数中this的值);
- 构造函数:箭头函数没有原型prototype,不能当成一个构造函数;
- 变量提升:普通函数存在变量提升。
token流程
前端登录用户名密码请求,服务器判断请求是否正确,后端生成token,返回给前端,前端保存,之后前端每次请求都会携带token,和后端一一对应,如果对应上就登陆成功,如果没对应上,验证失败重新登录。
描述effect的三种使用场景
- 在组件挂载时或者更新时获取dom元素
- 在组件挂载时订阅或者创建定时器,在组件卸载时清除订阅或定时器id
使用 React Hooks 好处是什么?
1、更容易复用代码 2、清爽的代码风格+代码量更少 3、代码可读性更强 4、组件树层级变浅 5、不用再去考虑 this 的指向问题
react中prop和state区别
1、props是外部传递给组件的,state是组件内自己管理的; 2、props不可变,state可以通过自定义的状态改变的; 3、props在组件内部是不可以修改的,state在组件内部可以进行修改
react函数组件和类组件的区别
1、函数组件是一个纯函数,他接收一个props对象返回一个react元素而类组件需要继承react.component并且创建render函数返回react元素;2、函数组件没有生命周期和状态state,而类组件有。
react中的ref
在react中不推荐直接操作dom元素,我们可以直接使用ref操作dom元素,以下是ref三种方法
- 字符串格式(官方不推荐)
- 函数格式
- createRef方法(官方推荐)