前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >适合儿初学者的 React Usecallback

适合儿初学者的 React Usecallback

原创
作者头像
泽霖
发布2024-02-11 23:23:43
1290
发布2024-02-11 23:23:43

让我们使用绘图或动画来更好地解释这个概念。

假设我们正在制作一个网页,在每次单击按钮时,我们都想绘制一个笑脸。

但是绘制这个笑脸需要很多计算资源。因此,我们告诉 React 使用回调来记住如何绘制笑脸。

现在,每次单击按钮时,React 都会“记住”如何绘制笑脸,而不会使用额外的资源。

代码语言:javascript
复制
// 假设这是我们绘制笑脸的咒语
function drawSmiley() {
  console.log("😊");
}

// 我们要求 React 记住这个咒语
const rememberDrawSmiley = useCallback(drawSmiley, []);

// 现在,每次我们想要绘制笑脸,我们只需使用 rememberDrawSmiley

考虑依赖项

将 useCallback 想象成你的机器人朋友的一个魔法笔记本,它帮助它以最佳方式记住如何执行任务(比如建造沙堡),而不浪费资源。

但是如果发生重要的变化(比如天气变化),机器人就知道需要用新的指令更新它的笔记本。

这样,你的机器人总是完美地建造沙堡,使用最少的资源,而你们俩都有更多的时间在海滩上玩耍和享受快乐!

代码语言:javascript
复制
import React, { useState, useCallback } from 'react';

function ColorBox() {
  const [weather, setWeather] = useState('sunny'); // 天气条件
  const [color, setColor] = useState('yellow'); // 盒子的颜色

  // useCallback 钩子用于根据天气确定盒子的颜色
  // 依赖项数组包括 'weather',这意味着这个 useCallback
  // 只有在 'weather' 改变时才会重新计算。
  const updateColor = useCallback(() => {
    switch (weather) {
      case 'sunny':
        setColor('yellow');
        break;
      case 'rainy':
        setColor('gray');
        break;
      case 'windy':
        setColor('blue');
        break;
      default:
        setColor('green'); // 如果天气没有被识别,默认颜色为绿色
    }
  }, [weather]); // 依赖项数组

  return (
    <div>
      <h2>天气:{weather}</h2>
      {/* 按钮将天气更改为 'sunny' */}
      <button onClick={() => setWeather('sunny')}>晴天</button>
      {/* 按钮将天气更改为 'rainy' */}
      <button onClick={() => setWeather('rainy')}>下雨</button>
      {/* 按钮将天气更改为 'windy' */}
      <button onClick={() => setWeather('windy')}>有风</button>

      {/* 按钮根据当前天气更新颜色 */}
      <button onClick={updateColor}>更新盒子颜色</button>

      {/* 这个 div 表示颜色会变化的盒子 */}
      <div style={{ width: '100px', height: '100px', backgroundColor: color, marginTop: '20px' }}>
        盒子
      </div>
    </div>
  );
}

export default ColorBox;

结论

useCallback 是 React 中的一个钩子,允许你跨组件重新渲染记住(记住)函数。

这意味着,与每次组件重新渲染时创建一个新函数不同,使用回调将返回相同的函数实例,直到该函数的依赖项发生变化(如果有的话)。

我正在参与2024腾讯技术创作特训营第五期有奖征文,快来和我瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档