美文网首页
React Hooks 学习

React Hooks 学习

作者: 与你清欢_李 | 来源:发表于2019-04-14 16:26 被阅读0次

React Hooks 学习

动机、解决了什么问题

  1. State Hook 简单来说 组件分为三种、无状态组建可以通过function 编写、但是有了 hooks ,可以很轻易的写出带状态的组件
  2. Effect Hook 可以让你在函数组件中执行一些具有effect(副作用)的操作;每次render之后都会执行effect相当于DidMonutDidUpdate,如果需要对指定的参数进行监听,可以在useEffect的 参数 2 传入一个 state, but 、传入监听参数、也会只当类似Didmount的事件

** 特别注意事项:hooks 是函数,所以 JS 函数有的闭包问题,hooks 中也会发生、所以需要合理规避闭包陷阱 **

  • useState
import React, { useState } from "react";

const Counter = props => {
  const [count, setCount] = useState(0); // count 状态变量 setCount set函数 useState(0);//使用hooks状态
  // 0 count 默认值
  const [num, setNum] = useState(0);

  return (
    <div>
      <article>
        {/* 不能使用count + 1 ,会报错count 是只读 */}
        <button onClick={() => setCount(count - 1)}>--</button>
        <span>count:{count}</span>
        <button onClick={() => setCount(count + 1)}>++</button>
      </article>
    </div>
  );
};
  • memo
//哪怕 并没有更新 也会触发子组件重新渲染 所以需要 memo 来缓存
import React, { useState, memo } from "react";

const Counter = props => {
  const [count, setCount] = useState(0);
  const [num, setNum] = useState(100);

  return (
    <div>
      <span>useState</span>
      <Child name={"child render test"} />
      <article>
        {/* 不要写成count ++ 会报错 count is read-only */}
        <button onClick={() => setCount(count - 1)}>--</button>
        <span>count:{count}</span>
        <button onClick={() => setCount(count + 1)}>++</button>
      </article>

      <article>
        <button onClick={() => setNum(num - 1)}>--</button>
        <span>num:{num}</span>
        <button onClick={() => setNum(num + 1)}>++</button>
      </article>
    </div>
  );
};

export default Counter;

const Child = memo(props => {
  console.log("child Render");
  const [state, setState] = useState(1);
  return (
    <div>
      {props.name}
      {state}
    </div>
  );
});
  • useEffect
import React, { useState, useEffect } from "react";

const EffectCom = prop => {
  const [title, setTitle] = useState("defaultTitle");

  // 在`DidMount` 和 `DidUpdate` 之后都会执行,如果需要对指定的参数进行监听,可以在`useEffect`的 参数2 传入一个 `state`, but 、传入监听参数、也会只当类似`Didmount`的事件
  useEffect(eff => {
    console.log(eff);
    document.title = title;
  }, title);

  console.log(title);
  return (
    <div>
      <span>Effect Hook</span>
      <article>
        <p>title:{title}</p>
      </article>
    </div>
  );
};

export default EffectCom;
  • useCallback
// 在函数组件中 如果数据变化、会引起数据重新渲染、所以需要使用到 `useCallback` 来解决这种问题

import React, { useState, useEffect, useCallback } from "react";

const EffectCom = prop => {
  const [title, setTitle] = useState("defaultTitle");
  const [state, setState] = useState(1);
  useEffect(
    eff => {
      console.log("useEffect");
      document.title = title;
    },
    [state]
  );

  const changeTitle = () => {
    setState(state + 1);
    setTitle("changeTitle::" + state);
  };
  //每次都执行了,说明有闭包调用问题、每次hello函数都会被重新声明,这是有问题的,需要缓存起来,在特定的时候才需要更新
  console.log("hello");
  //   const hello = () => {
  //     console.log("hello");
  //   };

  // 有了这样一层、 hello 函数并不会在每次都重新声明来占用内存,而是在state 变化的时候才重新声明,可以节约内存
  const hello = useCallback(() => {
    console.log("hello");
  }, [state]);

  console.log(title);
  return (
    <div>
      <span>Effect Hook</span>
      <article>
        <p onClick={hello}>title:{title}</p>
        <button onClick={changeTitle}>changeTitle</button>
      </article>
    </div>
  );
};

export default EffectCom;

github代码地址

相关文章

  • react-hooks

    前置 学习面试视频 总结react hooks react-hooks react-hooks为函数组件提供了一些...

  • 十个案例学会 React Hooks

    在学会使用React Hooks之前,可以先看一下相关原理学习React Hooks 前言 在 React 的世界...

  • React Hooks

    React Hooks Hooks其实就是有状态的函数式组件。 React Hooks让React的成本降低了很多...

  • React Hooks

    前言 React Conf 2018 上 React 提出了关于 React Hooks 的提案,Hooks 作为...

  • 5分钟简单了解React-Hooks

    首先附上官网正文?:React Hooks Hooks are a new addition in React 1...

  • react-hooks

    react-hooks react-hooks 是react16.8以后,react新增的钩子API,目的是增加代...

  • React-hooks API介绍

    react-hooks HOOKS hooks概念在React Conf 2018被提出来,并将在未来的版本中被...

  • React Hooks 入门

    React Hooks 是 React v16.8 版本引入了全新的 API。 React Hooks 基本概念 ...

  • react hooks 源码分析 --- useState

    1. react hooks简介 react hooks 是react 16.8.0 的新增特性,它可以让你在不编...

  • RxJS + React hooks

    最近业余时间一直在学习React hooks,以及RxJS。就想着能不能在实际项目中将React hooks和Rx...

网友评论

      本文标题:React Hooks 学习

      本文链接:https://www.haomeiwen.com/subject/balswqtx.html