React Hook

一、 State Hook

Hook在class内部不起作用,使用Hook取代class。

useState 是允许在函数组件中添加state的Hook。

useSate 定义state变量,和class中this.state一样的作用。一般来说,在函数退出后变量就就会”消失”,而 state 中的变量会被 React 保留。

useState参数:初始state。

useState返回值: 当前state以及更新state的函数。

import{React,useState,useEffect}from'react';

functionApp() {

// 数组解构,useState返回一个有两个值的数组,第一个为当前state(count)

// 第二个为更新state的函数,setCount

const[count,setCount]=useState(0);

// 相当于 componentDidMount 和 componentDidUpdate:

useEffect(()=>{

// 使用浏览器的 API 更新页面标题

document.title=`You clicked ${count}times`;

  });

return(

<div>

<p>Youclicked{count}times</p>

<buttononClick={()=>setCount(count+1)}>

Clickme

</button>

</div>

  );

}

exportdefaultApp;

读取state: 在函数中直接使用count。

更新state: 函数中已经有了count和setCount方法,直接使用setCount,不需要this。

使用多个state变量。setState允许我们给不同的state变量取不同的名称。

functionExampleWithManyStates() {

// 声明多个 state 变量

const[age,setAge]=useState(42);

const[fruit,setFruit]=useState('banana');

const[todos,setTodos]=useState([{text:'学习 Hook'}]);

  }

functionhandleOrangeClick() {

// 和 this.setState({ fruit: 'orange' }) 类似

setFruit('orange');

  }

二、Effect Hook

副作用: 数据获取,设置订阅以及手动更改React组件中的Dom。

Effect Hook :在函数组件中执行副作用操作。

Effect Hook是生命周期函数中componentDidMount(组件第一次渲染后调用),componentDidUpdate(组件完成更新后调用),componentWillUnmount(组件从DOM中移除之前)的组合。

两种常见的副作用操作:需要清除的和不需要清除。

无需清除的effect:

比如想在React更新DOM之后运行的一些额外的代码,比如发送网络请求,手动变更DOM,记录日志等。

在Class中上述案例应该是这样

componentDidMount() {

document.title=`You clicked ${this.state.count}times`;

  }

componentDidUpdate() {

document.title=`You clicked ${this.state.count}times`;

  }

使用useEffect执行相同的操作,React会保存传递的函数,称之为‘effect’。

useEffect(()=>{

document.title=`You clicked ${count}times`;

  });

在组件内部调用useEffect:可以在effect直接调用state变量或者其他props。他们已经保存在函数的作用域中。

默认情况下,useEffect会在每次渲染(第一次渲染之后和每次更新)之后都执行。

需要清除的effect

useEffect 返回一个函数,用来清除副作用。(没看懂)

useEffect(()=>{

functionhandleStatusChange(status) {

setIsOnline(status.isOnline);

   }

ChatAPI.subscribeToFriendStatus(props.friend.id,handleStatusChange);

return()=>{

ChatAPI.unsubscribeFromFriendStatus(props.friend.id,handleStatusChange);

   };

  });

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,277评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,689评论 3 393
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,624评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,356评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,402评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,292评论 1 301
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,135评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,992评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,429评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,636评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,785评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,492评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,092评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,723评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,858评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,891评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,713评论 2 354

推荐阅读更多精彩内容

  • Hook 简介 Hook是一些可以让你在函数组件里“钩入” React state 及生命周期等特性的函数, 是 ...
    不伟心阅读 938评论 0 1
  • Hook 是 React 16.8 的新增特性。它可以让你在不编写 class 的情况下使用 state 以及其他...
    菜菜的小阿允阅读 205评论 0 0
  • 一、react hook介绍 Hook 是 React 16.8 的新增特性。它可以让你在不编写 class 的情...
    dream_Q阅读 996评论 0 2
  • React Hook:使用 useEffect 一、描述 Effect Hook 可以让你能够在 Function...
    Leson17阅读 2,964评论 0 0
  • 什么是Hook Hook 是 React 16.8 的新增特性,用途是在函数组件中使用state、生命周期函数等其...
    灭绝小师弟阅读 490评论 0 0