react_Hooks

77 阅读1分钟

useState

useEffect

替代 Class ComponentcomponentDidMountcomponentDidUpdatecomponentWillUnmount 等部分生命周期

useReducer是 useState 的替代方案

使用格式:const [state, dispatch] = useReducer(reducer, initialArg, init) 它是 useState 的替代方案,在一些场景使用:

  • state 逻辑较复杂且包含多个子值
  • 下一个 state 依赖于之前的 state 

最重要的其实它的写法和 redux 差不多

useContext

接收一个 context 对象并返回该 context 的当前值。当前的 context 值由上层组件中距离当前组件最近的 <MyContext.Provider> 的 value prop 决定。当组件上层最近的 <MyContext.Provider> 更新时,该 Hook 会触发重渲染。 可用于组件间值传递

useMemo

使用格式:useMemo(() => fn, deps) 把“创建”函数和依赖项数组作为参数传入 useMemo,它仅会在某个依赖项改变时才重新计算 memoized 值。这种优化有助于避免在每次渲染时都进行高开销的计算。可以当作 vue 中的计算属性

useRef

返回一个可变的 ref 对象,其 .current 属性被初始化为传入的参数 如果想要访问子组件内的 ref 对象,子组件需要用 class 声明组件

useCallback

参数是内联回调函数和依赖项数组, 返回值是回调函数的memoized版,该回调函数仅在某个依赖项改变时才会更新。

【Demo】react hooks useContext实现父子组件通讯

父组件App.js

import CountContext from './CountContext';//
import Counter from './Counter' //子组件

export default function App() {
  const [ count, setCount ] = useState(0)
  return (
    <div>
      <p>计数器值为: { count }</p>
      <button onClick={ () => setCount(count+1)}>点我加一</button>
      <CountContext.Provider value={count}>
        <Counter />
      </CountContext.Provider>
    </div>
  )
}

子组件 Counter.jsx

import CountContext from './CountContext'

export default function Counter() {
  let count = useContext(CountContext)
  return (
    <h2>{count}</h2>
  )
}

公共组件 CountContext.jsx


const CountContext = createContext()
export default CountContext