React Hooks
React在16.7.0-alpha.0版本中提到了Hooks的观点,现在照样Proposal阶段。
官方也陈说,接下来的90%的工作会投入到React Hooks中。
从现在官方的文档能够看出,Hooks从以下四个方面来进步React的编码。
- state
- 生命周期
- content
- 自定义要领
Hooks的主要用途是替换之前版本的 class
组件。
申明:
到现在为止,React在已宣布的release版本中有该功用,想体验该功用,必需装置16.7.0-alpha.0。
npm i react@16.7.0-alpha.0 react-dom@16.7.0-alpha.0
//或许
yarn add react@16.7.0-alpha.0 react-dom@16.7.0-alpha.0
State Hooks
首先看一个React既有的版本基于 class
的组件.
import React from 'react';
class Counter extends React.Component {
constructor(props) {
super(props);
this.state = { count: 0 };
}
render() {
const { count } = this.state;
return (
<React.Fragment>
<p>You clicked {count} times</p>
<button onClick={() => setState({count : count + 1})}>
Click me
</button>
</React.Fragment>
);
}
}
接下来我们看看用Hooks是怎样完成的:
import React, { useState } from 'react';
export default () => {
const [count, setCount] = useState(0);
return (
<React.Fragment>
<p>You clicked { count } times</p>
<button onClick={ () => setCount(count + 1) }>
Click me
</button>
</React.Fragment>
);
};
从代码构造上,减少了编码量。由本来的 class
组件变成 function
组件了。
差别的处所:
- 新加入了
useState
要领 - 经由过程
useState
钩子解构出了state
与setState
要领。 -
state
的默认值,直接经由过程useState
传入 - 更新
state
不再运用setState
要领。
如果有多个 state
怎样定义呢?
const [count, setCount] = useState(0);
const [name, setName] = useState(null);
在线示例
引荐浏览《React 手稿》