React Hooks 新特性

237 阅读1分钟

useState

使无状态组件可以使用 state 功能

上代码(简单计数器)

// 导入
import React, { useState, Fragment } from "react";

function Count() {
  // 定义 (类似 state )
  const [count, setCount] = useState(0);

  return (
    <Fragment>
      // 使用
      <p>count : {count}</p>
      <button onClick={() => setCount(count + 1)}>add</button>
    </Fragment>
  );
}

export default Count;

useEffect

类似生命周期函数功能

上代码(简单计时器)

// 导入
import React, { useState, Fragment, useEffect } from "react";

function TimeCount() {
  // 定义 state
  const [isOn, setIsOn] = useState(false);
  const [count, setCount] = useState(0);

  // 开关
  let taggleIsOn = () => {
    setIsOn(!isOn);
  };
  
  // 设置计时
  useEffect(() => {
    let interval;
    if (isOn) {
      interval = setInterval(() => {
        setCount(count => count + 1);
      }, 1000);
    }
    
    // 清楚定时器
    return () => clearInterval(interval);
  }, [isOn]);

  return (
    <Fragment>
      <p>{count}</p>
      {isOn && <button onClick={taggleIsOn}></button>}
      {!isOn && <button onClick={taggleIsOn}></button>}
    </Fragment>
  );
}

export default TimeCount;

useContext

无状态组件使用 context 上下文

1.定义 Context 组件

import React from "react";

let Context = React.createContext();

export default Context;

2.创建生产者Provider

import React, { useState } from "react";

import Context from "./Context";

function Provider(props) {
  const [count, setCount] = useState(15);

  let context = {
    count: count,
    change: newCount => {
      setCount(count + newCount);
    }
  };

  return <Context.Provider value={context}>{props.children}</Context.Provider>;
}

export default Provider;

3.使用( 消费者 )

import React, { Fragment, useContext } from "react";

import Context from "./Context";

function Inner() {
  const { count, change } = useContext(Context);
  return (
    <Fragment>
      <p>{count}</p>
      <button onClick={() => change(15)}>change</button>
    </Fragment>
  );
}

export default Inner;