青训营笔记 | React基础与实践

41 阅读1分钟

React特性

  1. 声明式
  2. 组件化
  3. 跨平台编写

React哲学 Thinking in React

  • 定义:使用JS构建快速响应的大型Web应用的方式
  • 以下是响应web性能的两大主要原因: image.png image.png

React.lazy():由于用户看到的内容是有限的,因此在一开始的时候,不用全部加载所需内容,而是选择在使用的时候再按需加载,不然会导致页面反应很慢。

React.suspense:有时候网络比较慢,为了提高体验感,可以设置一个骨架屏等内容

ErrorBoundary:当子孙组件抛出错误的时候(主要是资源加载失败),渲染降级UI,例如“抱歉,出现错误!”。在函数式组件中,也有useErrorBounday了 image.png

类组件与函数式组件之间的区别

image.png (各种hooks构成组件)

现在更推荐使用函数式组件+hooks 补充:子组件->父组件通信:useImperativeHandle 父组件可以直接调用子组件的方法 以下为React官网的例子

//父组件 
import { useRef } from 'react'; 
import MyInput from './MyInput.js'; 
export default function Form() { 
const ref = useRef(null); 
function handleClick() { ref.current.focus(); //调用子组件方法 
// This won't work because the DOM node isn't exposed: // ref.current.style.opacity = 0.5; } 
return ( <form> <MyInput label="Enter your name:" ref={ref} />
<button type="button" onClick={handleClick}> Edit </button> </form> ); }
//子组件:进行改造 
import { forwardRef, useRef, useImperativeHandle } from 'react'; 
const MyInput = forwardRef(function MyInput(props, ref) { //对函数进行改造 
useImperativeHandle(ref, () => { return 
{ focus() { inputRef.current.focus(); }, 
scrollIntoView() { inputRef.current.scrollIntoView(); }, 
}; }, []); 
return <input {...props} />; }); 
export default MyInput;

实习的时候,使用过此类通信方式,当时的使用场景是这样的:

使用的契机是希望组件能够调用其兄弟组件的方法,项目中使用了上述方法,使各个兄弟组件的方法都能在父组件中被调用,然后由父组件将各个兄弟组件所需的方法作为参数传入