React

276 阅读4分钟

React是什么?

它是一个构建用户界面的JavaScript库(框架),可以做大型项目,如:SPA项目、APP。

官网:react.docschina.org/

特点:声明式编程、组件化开发(高内聚,低耦合)、一次学习,随处编程。

基本使用步骤

1.引入相关库文件

 ·React核心文件(react.development.js)
 
 ·React操作DOM文件(react-dom.development.js)
 
 ·Babel运行时,负责把React代码转化为浏览器能认识的代码(babel.min.js)

2.通过React实现前端效果

JSX基础语法

JSX是一个JavaScript的语法扩展,不是dom元素,标签是可以嵌套,标签外面的括号是可选的。

React的特点

组件化,声明式编码

使用虚拟的DOM+Diffing算法

props和state的区别?

props是父组件向子组件传递的数据流,能一直传递下去,爷爷到孙子。里面放的是初始化数据

state里的发放的数据是要变的,改变自身状态的,私有完全受控于当前组件。

正确使用state:不要直接修改state,因为不会重新渲染组件,用setState()构造函数是唯一给state赋值的地方。 state的更新是异步的,给setState接受一个函数而不是对象,如state是第一个参数,props是第二个参数

useEffect和useCallback? useEffect :给函数组件增加操作副作用的能力,第一次渲染,可以多次使用

useEffect(()=>{ 没有传第二个参数时,每次都会执行useEffect的内容 第二个参数数组,空数组时只执行一次,如果第二个有值,数组中的值任意一项发生改变,useEffect都会调用 浏览器渲染结束才执行 },[])

useCallback :当组件通讯时,性能优化时使用,避免组件重复渲染,避免函数在不必要情况下更新 const onChange = useCallback (() =>{ },[])

useMemo 返回的是一个值

useContent: 存储数据

useAsync和useAsyncFn区别う?

useAsync :在渲染后执行。

useAsyncFn :异步函数的一个状态管理,如果不调用useAsyncFn的回调函数,则不会执行。

storybook的好处? 可以独立地开发ui组件,不用依赖接口,在孤立的开发环境中交互展示组件

简单的用户测试页面,可以自定义样式的修改,方便对比变化效果

灵活度高,可配置性强

react-testing-library?

describe块是测试套件(test suite)

test块是测试用例(test case)

其中test关键字也可以写成it

一个测试套件可以包含多个测试用例,但是一个测试用例不能包含测试套件

写在测试用例内部的是断言(assertions)(例如:expect),断言结果可以是成功,可以是失败

组件渲染:render(component)

元素查找:get、query、find

触发用户行为:fireEvent.click(element)

query / get / find 有什么区别?

query返回查找的元素,如果找不到则会返回null。用于元素可能不存在的情况

get返回的也是匹配的节点,如果找不到则抛出error,适用于确定该元素存在的情况

find用于异步元素

为什么使用 react-testing-library(优于其他库的优点)?

可以从用户角度出发,模拟用户真实使用场景

包含单元测试,冒烟测试,测试覆盖率

验证单独的函数,组件,独立的功能模块是否能按照预期效果执行

前端单体测试

单元测试: JUnit, TestUnit jest, storybook

集成测试: Mockito, restassured, DBUnit react-testing-library

e2e测试: selenium, webdriverio, cypress browserstack, cypress dashboard

什么是 react-router、react-router-dom、react-router-native?

react-router:提供核心组件和钩子函数

react-router-dom:包含react-router的所有内容,并添加了一些特定DOM的api,

react-router-native:包含react native的所有内容,并添加特定的api,

BrowserRouter和HashRouter有什么区别?

BrowserRouter是web浏览器运行reac他router的推荐页面

HashRouter:可以将当前位置存储在hash当前 URL 的一部分中,不会发送到服务器,非必要情况不建议使用HashRouter

什么是Router,Link,Route,Switch,Redirect?

Router:定义路由的组件

Link:点击跳转到另外一个页面,相当于a标签。

Route:指定路由目标的 URL 以及要在该 URL 处显示的组件,具体到每一个路由的跳转,如

Switch:用来把多个Route组合到一起,Switch会迭代所有元素,并且只渲染当前路径匹配的第一个元素

Redirect:路由重定向

什么是MemoryRouter?

在内部将位置存储在一个数组中,不依赖于外部源,react router的测试可以使用该路由

children、component、render的优先级?

children:不管地址是否匹配都会渲染的内容

component:路由会创建一个新的组件重新挂载

render:如果有传递参数可以使用

children > component > render

什么时候用到exact?

exact会使路由的匹配更严格,为true何false的区别,加上exact