最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

React實現隨機顏色選擇器的示例代碼

 更新時間:2023年12月21日 09:19:47   作者:樂聞x  
顏色選擇器是一個用于選擇和調整顏色的工具,它可以讓用戶選擇他們喜歡的顏色,本文主要介紹了React實現隨機顏色選擇器的示例代碼,具有一定的參考價值,感興趣的可以了解一下

背景

在標簽功能中,由于有「背景色」屬性,每次新增標簽時都為選擇哪種顏色犯難。因此,我們思考如何通過JS代碼生成隨機顏色,提取一個通用的隨機顏色生成工具,并基于React框架封裝隨機顏色選擇器組件。

實際效果

原理與思路

作為前端開發(fā)人員,我們知道HTML接受 RGB、HEX、HSL三種格式的顏色。雖然是不同的格式,但是它們的本質都是通過數字表達出顏色。

因為RGB、HEX、HSL 本身都是數字,那么通過生成隨機數并組裝成符合格式要求的數字,也就達到預期隨機生成顏色的想法。

下面分別列舉RGB和HEX格式的隨機顏色生成思路

  • 以RGB格式為例,rbg(0,0,0)代表黑色,rbg(255,255,255)代表白色。所以我們通過JS的Math.random方法隨機生成3個0~255之間的隨機數,并且取整,將生成的三個隨機數進行字符串拼接即可得到一個RGB格式的顏色。
  • 以HEX格式為例,#000000代表黑色, #FFFFFF代表白色??梢园l(fā)現hex格式通常都是6位16進制的數字,每兩位16進制數字分為一組,比如1~2位代表red,3~4代表blue,5~6代表green。同樣的道理,通過Math.random方法隨機生成3個0~255之間的隨機數,通過JS的toString(16)方法將10進制隨機數轉化成16進制格式,最后通過字符串拼接得到HEX格式的顏色。

核心代碼

  • RBG格式隨機顏色生成方法
    export function getRandomRGBColor(limit: number = 256) {
      //十六進制顏色隨機
      const r = Math.floor(Math.random() * limit);
      const g = Math.floor(Math.random() * limit);
      const b = Math.floor(Math.random() * limit);
    
      const color = `rgb(${r},${g},$)`;
      return color;
    }
    
  • HEX格式隨機顏色生成方法
    export function getRandomHEXColor(limit: number = 256) {
      const getRandomHexNumber = (limit: number): string => {
        let randomNum = Math.floor(Math.random() * limit).toString(16);
        if (randomNum.length < 2) {
          randomNum = "0" + randomNum;
        }
        return randomNum;
      };
    
      //十六進制顏色隨機
      const r = getRandomHexNumber(limit);
      const g = getRandomHexNumber(limit);
      const b = getRandomHexNumber(limit);
    
      const color = `#${r}${g}$`;
      return color;
    }
    

React組件

這是標簽背景隨機顏色選擇器的React組件代碼,實現是非常簡單的,可以直接復制使用。

實際運行效果可以看本文最開始的「實際效果」截圖。

import { useMemo, useState } from "react";
import { getRandomColor } from "@/utils/color";
import classnames from "classnames";
import { Check, Refresh } from "@icon-park/react";
import { nanoid } from "nanoid";

interface ColorSelectProps {
  defaultValue: string;
  value?: string;
  onChange?: (value: string) => void;
}

export default function ColorSelect(props: ColorSelectProps) {
  const { defaultValue, value, onChange } = props;

  // 用于重新生成顏色
  const [randomId, setRandomId] = useState("");

  const colors = useMemo(() => {
    // 隨機生成6個顏色
    return new Array(6).fill(0).map(() => getRandomColor());
  }, [randomId]);

  const targetColors = useMemo(() => {
    // 過濾是否存在默認值的情況
    return [...colors, defaultValue || ""].filter(
      v => !!v && !["#"].includes(v),
    );
  }, [defaultValue, colors]);

  return (
    <div className="flex gap-2">
      {targetColors.map(color => {
        console.log("color--->", color);
        return (
          <div
            key={color}
            data-color={color}
            onClick={() => onChange?.(color)}
            className={classnames(
              "h-8 w-8 cursor-pointer flex justify-center items-center",
            )}
            style={{ backgroundColor: color }}>
            {value === color && (
              <Check theme="multi-color" size="24" fill="#fff" />
            )}
          </div>
        );
      })}
      <div
        className="h-8 w-8 cursor-pointer flex justify-center items-center border border-solid border-color-BGBrown text-color-BGBrown text-P4-Regular"
        onClick={() => setRandomId(nanoid())}>
        <Refresh theme="outline" size="18" fill="#333" />
      </div>
    </div>
  );
}

到此這篇關于React實現隨機顏色選擇器的示例代碼的文章就介紹到這了,更多相關React 隨機顏色選擇器內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家! 

相關文章

  • React父組件如何調用子組件的方法推薦

    React父組件如何調用子組件的方法推薦

    在React中,我們經常在子組件中調用父組件的方法,一般用props回調即可,這篇文章主要介紹了React父組件如何調用子組件的方法推薦,需要的朋友可以參考下
    2023-11-11
  • 使用React手寫一個對話框或模態(tài)框的方法示例

    使用React手寫一個對話框或模態(tài)框的方法示例

    這篇文章主要介紹了使用React手寫一個對話框或模態(tài)框的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-04-04
  • react hooks實現原理解析

    react hooks實現原理解析

    這篇文章主要介紹了react hooks實現原理,文中給大家介紹了useState dispatch 函數如何與其使用的 Function Component 進行綁定,節(jié)后實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2022-10-10
  • react中使用useEffect及踩坑記錄

    react中使用useEffect及踩坑記錄

    這篇文章主要介紹了react中使用useEffect及踩坑記錄,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • React 小技巧教你如何擺脫hooks依賴煩惱

    React 小技巧教你如何擺脫hooks依賴煩惱

    Hooks 是一種函數,該函數允許您從函數式組件 “勾住(hook into)” React 狀態(tài)和生命周期功能。 Hooks 在類內部不起作用 - 它們允許你無需類就使用 React,本文帶領大家學習React 小技巧教你如何擺脫hooks依賴煩惱,感興趣的朋友一起看看吧
    2021-05-05
  • 關于React動態(tài)加載路由處理的相關問題

    關于React動態(tài)加載路由處理的相關問題

    這篇文章主要介紹了關于React動態(tài)加載路由處理的相關問題,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-01-01
  • react類標簽的生命周期詳解

    react類標簽的生命周期詳解

    在React類組件中,生命周期方法是非常重要的概念,它們允許我們在組件的不同階段執(zhí)行代碼,這包括在組件掛載、更新以及卸載時執(zhí)行的生命周期方法,本文通過介紹React類組件中的生命周期方法,旨在幫助開發(fā)者深入理解組件的生命周期管理
    2024-11-11
  • 詳解React Native 屏幕適配(炒雞簡單的方法)

    詳解React Native 屏幕適配(炒雞簡單的方法)

    React Native 可以開發(fā) ios 和 android 的 app,在開發(fā)過程中,勢必會遇上屏幕適配,這篇文章主要介紹了詳解React Native 屏幕適配(炒雞簡單的方法),小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-06-06
  • React事件處理的機制及原理

    React事件處理的機制及原理

    這篇文章主要介紹了React事件處理的機制及原理,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-12-12
  • React?Hooks項目實戰(zhàn)

    React?Hooks項目實戰(zhàn)

    React?Hooks是React?16.8版本引入的新特性,它使得在函數組件中也能夠使用狀態(tài)(state)和其他React特性,本文就來詳細介紹一下React?Hooks項目實戰(zhàn),感興趣的可以了解一下
    2023-11-11

最新評論

金山区| 遵义市| 青铜峡市| 金秀| 太保市| 翼城县| 石城县| 达日县| 于都县| 万宁市| 淮安市| 琼海市| 梅河口市| 胶南市| 徐闻县| 龙里县| 收藏| 乡宁县| 大兴区| 景泰县| 五大连池市| 南京市| 铁岭县| 库伦旗| 怀柔区| 乌恰县| 辽中县| 青田县| 闻喜县| 洛隆县| 宣汉县| 利辛县| 沙河市| 独山县| 青阳县| 永济市| 洛隆县| 浙江省| 星座| 库车县| 沂南县|