资讯专栏INFORMATION COLUMN

react hooks 全面转换攻略(一) react本篇之useState,useEffect

KnewOne / 3254人阅读

摘要:经典案例此例子中是最新的语法其中是他的值是用来设置值的函数是初始值该初始值可以接受任何参数但是记得当他接受为一个函数时就变成了延迟初始化该函数返回值即为这两种初始化方式是相等的但是在函数为初始值时会被执行一次这里只会在初始化的时候执行中的

useState

经典案例:

import { useState } from "react";

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

  return (
    

You clicked {count} times

) }

此例子中, useState(0) 是最新的 hooks api;
语法:

function useState(initialState: S | (() => S)): [S, Dispatch>];

其中 state 是他的值, setState 是用来设置值的函数, initialState 是初始值

useState-initialState

该初始值可以接受任何参数,但是记得当他接受为一个函数时,就变成了Lazy initialization (延迟初始化)
该函数返回值即为initialState

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

const [count, setCount] = useState(()=>0);
// 这两种初始化方式 是相等的,但是在函数为初始值时会被执行一次

const [count, setCount] = useState(()=>{
    console.log("这里只会在初始化的时候执行")
    // class 中的 constructor 的操作都可以移植到这里
    return 0
});
// 当第一次执行完毕后 就和另一句的代码是相同的效果了
useState-setState

也许很多人 在使用 class 的 setState 时候,会经常使用他的回调函数,
但是这里很遗憾,他只接受新的值,如果想要对应的回调,可以使用useEffect,这个问题等会会提供一个跳转链接

useEffect

语法:

function useEffect(effect: EffectCallback, deps?: DependencyList): void;

经典案例:

useEffect(() => {
  console.log("在 dep 改变时触发,若无 dep 则,每次更新组件都会触发")
  return () => {
    console.log("在组件 unmount 时触发")
  };
});

deps 必须是一个数组,但是如果是一个空数组时:

  useEffect(() => {
    console.log("效果的等于 componentDidMount")
  }, [])

即使有 deps ,他在初始化时也会触发一次

与 setState 形成回调函数:

useState-setState 中提到, class 中 setState 都是有回调的,而在 hooks 中 通过 useEffect 同样也可以实现它的效果

关于回调值的探秘:

说起回调值,他能接受很多值,但是我们要搞清楚一点 他到底可以接受什么值,而他的变化的检测:

首先我们应该清楚, string,number,undefined,null 他的值都是能够正常检测的,
问题的关键还是在于 object 和 function

关于 object 的试验:

将回调值设置为一个在 function 外面的 object:

let deps = {grewer: 1}

在点击按钮时:

deps.grewer = deps.grewer + 1;
console.log(deps)

可以发现:
deps.grewer 的值在变化,但是 effect 却没有触发

而这样设置值时:

deps = {grewer: deps.grewer + 1};

每次都会触发 effect 函数

再次试验:

deps = Object.assign({}, deps)

同样地 每次都会触发 effect 函数

得出结论:

当依赖值为 object 时,他的值引用发生变化就会触发 effect 的更新

但是如果只是对象里某个值变化而引用不变化,effect 依旧不会触发

关于 function 的试验结论:

如果初始值为 function, 而将其改为数字等,会触发 effect

function 也是一个对象,当我们添加一个值在上面时,他的 effect 也不会触发

引用为一个新函数时,他每次都会触发;

试验完毕,相信大家对于 effect 也有了许多的了解

后续还会讲述其他 hooks api 与 redux 的全面转换, eslint 的新配置等

相关文章:

react hooks 全面转换攻略(一) react本篇之useState,useEffect

react hooks 全面转换攻略(二) react本篇剩余 api

react hooks 全面转换攻略(三) 全局存储解决方案

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/103301.html

相关文章

  • react hooks 全面转换攻略(二) react本篇剩余 api

    摘要:不知道大家有没有使用过他的作用和中的差不多吧在需要读取的高度宽度的时候特别需要说到现在基本已经讲完了除了我将会放在篇中讲述相关文章全面转换攻略一本篇之全面转换攻略二本篇剩余全面转换攻略三全局存储解决方案 useCallback,useMemo 因为这两个 api 的作用是一样的,所以我放在一起讲; 语法: function useMemo(factory: () => T, deps:...

    molyzzx 评论0 收藏0
  • 全面了解 React 新功能: Suspense 和 Hooks

    摘要:他们的应用是比较复杂的,组件树也是非常庞大,假设有一千个组件要渲染,每个耗费一千个就是由于是单线程的,这里都在努力的干活,一旦开始,中间就不会停。 悄悄的, React v16.7 发布了。 React v16.7: No, This Is Not The One With Hooks. showImg(https://segmentfault.com/img/bVblq9L?w=97...

    Baaaan 评论0 收藏0
  • 【译】如何在React Hooks中获取数据?

    摘要:在这种情况下,如果状态发生变化,将再次运行以从获取数据。你可以在内做到在表单中获取数据到目前为止,我们只有和按钮的组合。现在,在获取数据时,可以使用向函数发送信息。例如,在成功请求的情况下,用于设置新状态对象的数据。 原文链接: https://www.robinwieruch.de/r... 在本教程中,我想通过state和effect hook来像你展示如何用React Hook...

    habren 评论0 收藏0
  • React Hooks 中如何请求数据?

    摘要:现在,请求数据和查询参数两个相互独立,但是我们需要像一个办法希望他们耦合起来,只获取输入框输入的参数指定的话题文章。好了,现在一旦你改变输入框内容,数据就会重新获取。 showImg(https://segmentfault.com/img/remote/1460000018652592?w=1024&h=683); 通过这个教程,我想告诉你在 React 中如何使用 state 和 ...

    snowell 评论0 收藏0
  • 十个案例学会 React Hooks

    摘要:在线传递给的是而不是,返回值即是想要透传的数据了。所以函数组件在每次渲染的时候如果有传递函数的话都会重渲染子组件。在学会使用React Hooks之前,可以先看一下相关原理学习React Hooks 前言 在 React 的世界中,有容器组件和 UI 组件之分,在 React Hooks 出现之前,UI 组件我们可以使用函数,无状态组件来展示 UI,而对于容器组件,函数组件就显得无能为力,我...

    williamwen1986 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<