Hook是react 16.8 新增的特性
 是希望在不编写 class的情况下 去操作state和其他react特性
 Hook的话 就不建议大家使用class的形式了 当然也可以用 这个他只是不推荐
我们还是先创建一个普通的react项目
我们之前写一个react组件可以这样写
import React from "react";
export default class AppRouter extends React.Component{
    render(){
        return (
            <div>
                Hello World
            </div>
        )
    }
}
简单说 就是声明一个类对象 然后在里面 写组件的基本内容
然后 就还有一种函数式的写法
import React from "react";
function dom1(){
    return (
        <div>
            Hello World
        </div>
    )
}
export default dom1
这两种写法界面效果没有什么不同
 
 甚至我们直接这样写
import React from "react";
export default () => {
    return (
        <div>
            Hello World
        </div>
    )
}
也是可以出界面的
 
 但是 这样问题就来了 我们在这里面是没办法 创建 state和生命周期的
在中我们可以这样写
import React from "react";
import axios from "axios";
export default class AppRouter extends React.Component{
    state = {
        name: "小猫猫"
    }
    render(){
        return (
            <div>
                { this.state.name }
            </div>
        )
    }
}
这样 就可以创建state
 但函数这样去声明显然是没用的
那么 我们皆可以这样写
import React, { useState } from "react";
const MyComponent = () => {
  const [name] = useState("小猫猫");
  return (
    <div>
      {name}
    </div>
  );
};
export default MyComponent;
运行结果如下
 
 这样 我们这种函数式就能用State数据了
 然后 我们修改他也可以
import React, { useState } from "react";
const MyComponent = () => {
  const [name,setName] = useState("小猫猫");
  return (
    <div>
      {name}
      <button onClick={ ()=> { setName("大猫猫")} }>更改</button>
    </div>
  );
};
export default MyComponent;
注意 他这里修改数据的方法是你在声明变量时一起声明的 你要它叫什么 他就叫什么
例如 我这里 声明name变量 然后修改的值的函数 我声明叫 setName 你也可以写其他名字
 然后我们点击按钮调用setName 参数就是要更改后的新值
我们运行代码
 
 然后点击更改按钮
 
 我们的变量就改变了
然后 我们来写两个值
import React, { useState } from "react";
const MyComponent = () => {
  const [name,setName] = useState("小猫猫");
  const [age,setAge] = useState(2);
  return (
    <div>
      {name}
      {age}
      <button onClick={ ()=> { setName("大猫猫")} }>更改</button>
      <button onClick={ ()=> { setAge(age+1)} }>又一年</button>
    </div>
  );
};
export default MyComponent;
运行项目
 
 我们更改和又一年都点一下
 
 也是没有任何问题


















