最近看到JavaScript中卷,其中一些什么原生函数,啥封装的,还有数据基础类型没啥好写的,我最多也就是在巩固,所以也就没有写出自己学到的东西,但react中16.8新更新的Hook属实也没接触到过,但这个东西又很重要,没办法,只能照着react的官方文档开始怼了,到现在的话,也看的差不多了,就记录一下Hook。毕竟多敲一遍,加深一下hook的使用
1.Hook是什么
hook 是一个特殊的函数,它可以让你“钩入” React的特性,如:useState是允许你在React函数组件中添加state的Hook,当然,还有其他react中内置的Hook。其中要注意的是,Hook 是在class内部是不起作用的,但咱们也可以用它来取代class。在16.8之前函数式组件中,需要添加一些state的话是必须将他转换为class,但现在可以在现有的函数组件中使用Hook。
2.用法
当你用class语法时写的state:
class Example extends React.Component {
constructor(props) {
super(props);
this.state = {
count: 0
};
}
render() {
return (
<div>
<p>{this.state.count} </p>
<button onClick={() => this.setState({ count: this.state.count + 1 })}>
点击我试试看
</button>
</div>
);
}
}
在等价的函数式组件里:
import React, { useState } from 'react';
function Example() {
const [count, setCount] = useState(0);
return (
<div>
<p>You clicked {count} times</p>
<button onClick={() => setCount(count + 1)}>
Click me
</button>
</div>
);
}
在函数组件中,我们没有 this,所以我们不能分配或读取 this.state。我们直接在组件中调用 useState Hook。 这个例子中 有两个参数,count和setCount,其中第一个是相当于state,第二个相当于setstate更新值。不过需要注意的是,需要成双成对的获取他们,就像我所写的例子一样。还有一点是,state只在组件首次渲染的时候被创建。其中方括号运用的数组解构,意味着同时创建了count,setCount两个变量。
3.读取state
当在class组件中显示当前的,得this.state.count:
<p>this.state.count}</p>
在函数中,因为函数中this是直接指向函数自己本身的,获取不到外面的this,所以直接用count就好了,Hook已经处理好了,这也是推荐Hook和必须学Hook的原因。
4.更新state
class中:
<button onClick={() => this.setState({ count: this.state.count + 1 })}> </button>
函数中:
<button onClick={() => setCount(count + 1)}></button>
5.多个state变量
const [age, setAge] = useState(20);
const [fruit, setFruit] = useState('banana');
const [todos, setTodos] = useState([{ text: '学习 Hook' }]);
6.用法注意
不要在循环,条件或者嵌套函数中调用Hook,确保总是在你的React函数的最顶层调用他们。这样可以确保Hook在每一次渲染中都按照同样的顺序被调用。保持Hook状态的正确。
要只在React函数追踪调用Hook,不能再普通JavaScript中调用。可以在自定义Hook中调用其他Hook
7.Hook其他API
基础Hook
useState:最常用的
useEffect:在我的理解中,相当于一个生命周期。但与componentDidMount、componentDidUpdate 不同的是,在浏览器完成布局与绘制之后,传给 useEffect 的函数会延迟调用。这使得它适用于许多常见的副作用场景,比如设置订阅和事件处理等情况,因此不应在函数中执行阻塞浏览器更新屏幕的操作。
useContext:接收一个 context 对象(React.createContext 的返回值)并返回该 context 的当前值。当前的 context 值由上层组件中距离当前组件最近的 <MyContext.Provider> 的 value prop 决定。
毕竟还没有使用过,目前不了解他的具体意思是什么,等我使用过之后会再补一章。
Hook最基础最基础的用法就差不多这么多。具体还得看实战,哎。学无止境呀,加油叭