react学习笔记(二)

112 阅读2分钟

一、React.Component、React.PureComponent、React.FC的使用与区别

1.React.Component

包含最常用的render(),componentDidMount(),shouldComponentUpdate…
shouldComponentUpdate(nextProps, nextState) 判断React组件的输出是否受当前state或props更改的影响,只要组件的props或者state发生了变化,就会重新构建virtual DOM,然后使用diff算法进行比较

2.React.PureComponent

React.PureComponent与React.Component几乎完全相同,也包括render、生命周期等。但React.PureComponent通过props和state浅对比来实现shouldComponentUpdate().如果对象包含复杂的数据结构,它可能会因深层次的数据不一致而产生错误的否定判断

React.Component = shouldComponent(false) + React.Component

3.React.FC React.FC<>的在typescript使用的一个泛型,这个泛型里面可以使用useState

eg

const Certificate: React.FC<Props> = props => {
    const [showUpload, setShowUpload] = useState<boolean>(false)
}

二、dva用法

connect dva提供了connect方法,将model和component串联起来

使用

export default connect(mapStateToProps, mapDispatchToProps)(TodoList)

mapStateToProps:更新props————>作为输入源。返回一个对象,key为UI界面对应的名称,value为state处理的结果

mapDispatchToProps:更新action————>作为输出源。触发action更新reducer,进而更新state,从而驱动参数1变化,引起UI数据的变化

Dispatch dispatching function 是一个用于触发 action 的函数,action 是改变 State 的唯一途径,但是它只描述了一个行为,而 dipatch 可以看作是触发这个行为的方式,而 Reducer 则是描述如何改变数据的

使用方法

dispatch({
      type: 'role/insert',
      payload: {} // 需要传递的信息,
      callback: (response: any) => {
        if (response) {
          message.success('保存成功');
        }
      },
    });

三、React上下文Context的使用

context(上下文)旨在为React复杂嵌套的各个组件提供一个生命周期内的统一属性访问对象,提供一个树形结构内的一个数据共享容器

使用Context方式进行数据的共享,各个树状组件均可通过统一的Consumer统一访问Consumer共享数据

const EditableCOntext = React.createContext({});
const form: any = useContext(EditableContext)

四、在函数组件中使用生命周期函数

useEffect(()=>{},[])

主要的是第二个参数是空数组[],只会在组件挂载后运行一次。

useEffect 模拟函数组件的生命周期函数

1.模拟componentDidMount // 进入页面后数据初始化

2.模拟componentDidUpdate

3.模拟componentWillUnMount