React(^16.8) 新增特性Hook

Hook 是 React 16.8 的新增特性。它可以让你在不编写 class 的情况下使用 state 以及其他的 React 特性。

hook包含以下函数:useState, useEffect, useContext, useReducer, useMemo, useRef等。
引入方式: import {useState, useEffec ...} from ‘react‘;

1. let [参数名称, 修改参数的方法名] = useState(参数默认值);

import React, { useState } from ‘react‘;

function Example() {
  // 声明一个叫 "count" 的 state 变量
  const [count, setCount] = useState(0);

  return (
    <div>
      <p>You clicked {count} times</p>
      <button onClick={() => setCount(count + 1)}>
        Click me
      </button>
    </div>
  );
}  

2. useEffect(()=>{生命周期内执行的操作}, [状态对应的变量]) 可以看作是componentDidMountcomponentDidUpdate 和 componentWillUnmount 这三个函数的组合。

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

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

  useEffect(() => {
    document.title = `You clicked ${count} times`;
  }, [count]);

  return (
    <div>
      <p>You clicked {count} times</p>
      <button onClick={() => setCount(count + 1)}>
        Click me
      </button>
    </div>
  );
}

3. var value = useContext(React.creactContext(value)); 接收一个 context 对象(React.createContext 的返回值)并返回该 context 的当前值。当前的 context 值由上层组件中距离当前组件最近的 <MyContext.Provider> 的 value prop 决定。当组件上层最近的 <MyContext.Provider> 更新时,该 Hook 会触发重渲染,并使用最新传递给 MyContext provider 的 context value 值。

import React, { useState , createContext , useContext} from ‘react‘;
const CountContext = createContext()

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

    return (
        <div>
            <p>You clicked {count} times</p>
            <button onClick={()=>{setCount(count+1)}}>click me</button>
            <CountContext.Provider value={count}>
                  <Counter />
            </CountContext.Provider>

        </div>
    )
}

function Counter(){
    const count = useContext(CountContext)  //一句话就可以得到count
    return (<h2>{count}</h2>)
}

export default Example4;
            

4.const [state, dispatch] = useReducer(reducer, initialArg, init);useState 的替代方案。它接收一个形如 (state, action) => newState 的 reducer,并返回当前的 state 以及与其配套的 dispatch 方法。

import React, { useReducer } from ‘react‘;

function ReducerDemo(){
    const [ count , dispatch ] =useReducer((state,action)=>{
        switch(action){
            case ‘add‘:
                return state+1
            case ‘sub‘:
                return state-1
            default:
                return state
        }
    },0)
    return (
       <div>
           <h2>现在的分数是{count}</h2>
           <button onClick={()=>dispatch(‘add‘)}>Increment</button>
           <button onClick={()=>dispatch(‘sub‘)}>Decrement</button>
       </div>
    )

}

export default ReducerDemo

5.const memoizedValue = useMemo(() => computeExpensiveValue(a, b), [a, b]);主要用来解决使用React hooks产生的无用渲染的性能问题,功能类似于shouldCompnentUpdate。

function ChildComponent({name,children}){
    function changeXiaohong(name){
        console.log(‘她来了,她来了。小红向我们走来了‘)
        return name+‘,小红向我们走来了‘
    }

    const actionXiaohong = useMemo(()=>changeXiaohong(name),[name])
    return (
        <>
            <div>{actionXiaohong}</div>
            <div>{children}</div>
        </>
    )
}

6.const refContainer = useRef(initialValue);useRef 返回一个可变的 ref 对象,其 .current 属性被初始化为传入的参数(initialValue)。返回的 ref 对象在组件的整个生命周期内保持不变。

function TextInputWithFocusButton() {
  const inputEl = useRef(null);
  const onButtonClick = () => {
    // `current` 指向已挂载到 DOM 上的文本输入元素
    inputEl.current.focus();
  };
  return (
    <>
      <input ref={inputEl} type="text" />
      <button onClick={onButtonClick}>Focus the input</button>
    </>
  );
} 

参考文章:

https://jspang.com/detailed?id=50

https://zh-hans.reactjs.org/docs/hooks-reference.html

原文地址:https://www.cnblogs.com/dadouF4/p/12342516.html

时间: 2024-08-01 05:22:47

React(^16.8) 新增特性Hook的相关文章

关于为什么使用React新特性Hook的一些实践与浅见

前言 关于Hook的定义官方文档是这么说的: Hook 是 React 16.8 的新增特性.它可以让你在不编写 class 的情况下使用 state 以及其他的 React 特性. 简单来说,就是在使用函数式组件时能用上state,还有一些生命周期函数等其他的特性. 如果想了解Hook怎么用,官方文档和阮一峰的React Hooks 入门教程都讲得很清楚了,我建议直接看官方文档和阮大神的文章即可. 本篇博客只讲为什么要用React的Hook新特性,以及它解决了什么问题. 为什么使用Hook?

随笔分类 - [C#6] 新增特性

C#6.0中引入的基本特性总结 [C#6] 7-索引初始化器 摘要: 0. 目录 C#6 新增特性目录 1. 老版本的代码 早C#3中引入的集合初始化器,可是让我们用上面的语法来在声明一个字典或者集合的时候立即初始化一些项进去,其实在C#3中这是个语法糖,实质编译后的结果是调用字典或者集合的Add方法逐一添加这些项.但是有一点小小的不直观.先看看这个版的IL吧: 本质阅读全文 posted @ 2016-07-09 22:00 Blackheart 阅读(150) | 评论 (11) 编辑 [C

[ExtJS学习笔记]第十节 Extjs5新增特性之ViewModel和DataBinding

本文地址:http://blog.csdn.net/sushengmiyan/article/details/38612721 本文作者:sushengmiyan -------------------------------------------------------------资源链接----------------------------------------------------------------------- 翻译来源:http://docs.sencha.com/ext

Performance Tuning guide 翻译 || Performance Tuning Guide 11G中新增特性

Performance Tuning Guide 11G中新增特性 本章描述了Oracle11g Release2(11.2)中增加了哪些新的性能调整 特性,以及指向这些增加信息. 本章节描述的特性以及增强,包含了优化数据库性能的各个方面. 关于Oracle11gR2的所有新特性汇总,可以查看Oracle Database New Features Guide. 11.2.0.2中新增的新特性(关于性能调优) 新增的以及更新过的性能调整特性包括: 注:Resource Manager(资源管理器

[译文]React v16(新特性)

[译文]React v16(新特性) 查看原文内容 我们很高兴的宣布React v16.0发布了! 这个版本有很多长期被使用者期待的功能,包括: fragments (返回片段类型) error boundaries(处理错误) portals (挂载方式) custom DOM attributes (支持自定义DOM属性) improved server-side rendering (提升服务端渲染性能) reduced file size (减少文件大小) (下面逐一说明) render

React劲爆新特性Hooks 重构去哪儿网火车票PWA云资源

var link="www.marenzy.top"//完整视频资源获取地址,复制链接在浏览器打开 var vx="aishangit666"//如链接失效可添加微信 React劲爆新特性Hooks 重构去哪儿网火车票PWA 本课程先带你细数最近一年来React的新特性,如Hooks.Redux API,让你从头理解Hooks对传统React开发方式的革命性改变.再利用所学知识,在不同场景下,重构去哪儿网火车票系统,并使用PWA实现堪比原生APP体验的应用. Rea

H5新增特性整理

1.简化的文档类型和字符集 (1)文档类型 <!DOCTYPE HTML> 之所以如此简单,是因为HTML5不再是SGML( Standard Generalized Markup language,标准通用标记语言)的一部分,而是独立的标记语言,不需要再考虑文档类型 (2)字符集 <meta charset="UTF-8"> 只需要utf-8即可 2.富有语义化的新结构元素 <header> <h1>HTML5新结构<h1/>

【PHP系列】PHP 7.0新增特性详解

开始介绍PHP7.0新特性,具体的可以参照官网的介绍,我来挑一些给大家详细讲解下 http://php.net/manual/en/migration70.new-features.php 1. ?? 运算符(NULL 合并运算符) $a = $_GET['a'] ?? 1; 它相当于: $a = empty($_GET['a']) ? 1 : $_GET['a']; 我们知道三元运算符是可以这样用的: $a ?: 1 但是这是建立在 $a 已经定义了的前提上.新增的 ?? 运算符可以简化判断.

【转】C#各个版本中的新增特性详解

转自:http://www.cnblogs.com/knowledgesea/p/6694979.html 序言 自从2000年初期发布以来,c#编程语言不断的得到改进,使我们能够更加清晰的编写代码,也更加容易维护我们的代码,增强的功能已经从1.0搞到啦7.0甚至7.1,每一次改过都伴随着.NET Framework库的相应支持,也不断的带给我们期待与惊喜.下面我们就对c#一路走到现在,做一个回顾与学习. C#语言目标与前行 c#的设计目标是有以下几点: 旨在是一种简单,现代,通用的面向对象编程