1. 程式人生 > >React手稿之State Hooks of Hooks

React手稿之State Hooks of Hooks

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 [email protected] [email protected]

//或者

yarn add [email protected] [email protected]


<h1>State Hooks</h1>
<p>首先看一個React既有的版本基於 <code>class</code> 的元件.</p>

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>
);
}

}


<p>接下來我們看看用Hooks是如何實現的:</p>

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>
);
};


<p>從程式碼結構上,減少了編碼量。由原來的 <code>class</code> 元件變成 <code>function</code> 元件了。</p>
<p>不同的地方:</p>
<ul>
<li>新加入了 <code>useState</code> 方法</li>
<li>通過 <code>useState</code> 鉤子解構出了 <code>state</code> 與 <code>setState</code> 方法。</li>
<li>
<code>state</code> 的預設值,直接通過 <code>useState</code> 傳入</li>
<li>更新 <code>state</code> 不再使用 <code>setState</code> 方法。</li>
</ul>
<p>如果有多個 <code>state</code> 怎麼定義呢?</p>

const [count, setCount] = useState(0);
const [name, setName] = useState(null);
```

線上示例
推薦閱讀《React 手稿》

來源:https://segmentfault.com/a/1190000017261209