useState

  1. 如果state是一个对象,setState是否可以自动合并属性

回答:不可以局部更新

  1. state地址要变,不变不渲染。因此必须要用新对象
  2. setState接受函数

    useReducer

    初始化initialState
    创建reducer(state, action)
    1. function(state, action) {
    2. switch(action.type) {
    3. case 'add':
    4. case 'mul':
    5. }
    6. }

传给useReducer 得到读写api

  1. const [state, dispatch] = useReducer(reducer, initialState)

调用写 ({type: ‘操作类型’})

useEffect

副作用,对环境的改变。在浏览器渲染完毕后执行
模拟生命周期

模拟ComponentDidMount

useEffect(()=>{
console.log(‘first’)
}, [])

模拟ComponentDidUpdate

useEffect(()=>{
console.log(‘任意属性变了’)
})
useEffect(()=>{
console.log(‘n属性变了’)
}, [n])

模拟ComponentWillUnmount

useEffect(()=>{
console.log(‘first’)
return ()=>{
console.log(‘组件要死了’)
}
})

useMemo

可以作为性能优化的手段