๐ŸŽจ react COLORIC-react์˜ 1.8KB ์ƒ‰์ƒ ์„ ํƒ๊ธฐ.์‹ ์†ํ•˜๊ณ  ์˜์กด์„ฑ์ด ์—†์œผ๋ฉฐ ์‚ฌ์šฉ์ž ์ •์˜ ๋ฐ ์•ก์„ธ์Šค ๊ฐ€๋Šฅ

9063 ๋‹จ์–ด reactshowdeva11yjavascript

๐Ÿ“† ์ด์•ผ๊ธฐ


๋ช‡ ๋‹ฌ ์ „์— React ํ”„๋กœ์ ํŠธ์— ์‚ฌ์šฉํ•  ์ƒ‰์„ ํƒ๊ธฐ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
๋‚˜๋Š” ์ข‹์€ ์†Œํ”„ํŠธ์›จ์–ด ํŒจํ‚ค์ง€๋ฅผ ์ฐพ๋Š” ๋ฐ ๋งŽ์€ ์‹œ๊ฐ„์„ ๋“ค์˜€๊ณ , ๊ฐ€์žฅ ์œ ํ–‰ํ•˜๋Š” React ์ƒ‰์ƒ ์„ ํƒ๊ธฐreact-color๊ฐ€ 140KB(์ „์ฒด๋ณด๋‹ค ํ›จ์”ฌ ํฌ๋‹คreact-dom, ๋‚˜๋ฌด๊ฐ€ ํ”๋“ค๋ ค์„œ๋Š” ์•ˆ ๋˜๊ณ , ์ ‘๊ทผํ•  ์ˆ˜ ์—†๊ณ , ํ‚ค๋ณด๋“œ ๋‚ด๋น„๊ฒŒ์ด์…˜์„ ์ง€์›ํ•˜์ง€ ์•Š์œผ๋ฉฐ, 11๊ฐœ์˜ ์˜์กดํ•ญ์„ ๋Œ์–ด๋“ค์ผ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์†๋„๋Š” ๊ทธ๊ฒƒ๋ณด๋‹ค ๋น ๋ฅด์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•„์ฐจ๋ ธ๋‹ค.
๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  react-color ๋Š” ๋งค์ฃผ 170๋งŒ ๊ฑด์˜ ๋‹ค์šด๋กœ๋“œ๋ฅผ ๋ฐ›์„ ์ •๋„๋กœ ์ธ๊ธฐ๊ฐ€ ๋†’๋‹ค.๊ทธ ์ค‘ ๊ฐ€์žฅ ํฐ ์ด์œ ๋Š” ํ˜„๋Œ€์˜ ์š”๊ตฌ์™€ ์ผ์น˜ํ•˜๋Š” ๋” ๊ฐ€๋ฒผ์šด ๋Œ€์ฒดํ’ˆ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
๊ทธ๋ž˜์„œ ํ•˜๋‚˜ ๋งŒ๋“ค๊ธฐ๋กœ ํ–ˆ์–ด์š”.์ฃผ์š” ๋ชฉํ‘œ๋Š” react-color๋ณด๋‹ค 10๋ฐฐ ์ด์ƒ ๊ฐ€๋ฒผ์šด ํ˜„๋Œ€ ์ƒ‰ ์„ ํƒ๊ธฐ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด๋‹ค.
Ryan Christian, Alex Taktarov, 7์›” ์ด๋ž˜๋กœ ์ €๋Š” React ์ปค๋ฎค๋‹ˆํ‹ฐ๋ฅผ ์œ„ํ•ด ๊ฐ€์žฅ ์ž‘๊ณ  ๋น ๋ฅธ ์ƒ‰์ƒ ์„ ํƒ๊ธฐ๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•ด ์™”์Šต๋‹ˆ๋‹ค.

๐ŸŽ‰ ์ด๊ฒƒ์ด ๋ฐ”๋กœ ๋‚ด๊ฐ€ ํƒœ์–ด๋‚œ ์ด์œ ๋‹ค!


ํ”„๋ ˆ์  ํ…Œ์ด์…˜:
https://omgovich.github.io/react-colorful
๋ฌธ์„œ:
https://github.com/omgovich/react-colorful react-colorful(v4.1)์˜ ํ˜„์žฌ ๋ฒ„์ „์€ react-color๋ณด๋‹ค 18๋ฐฐ ๊ฐ€๋ณ๋‹ค.์–˜๋Š” 1.8KB๋ฐ–์— ์•ˆ ๋ผ!

๐Ÿ—œ ์™œ ์ด๋ ‡๊ฒŒ ์ž‘๊ณ  ๋นจ๋ผ?


1. ์˜์กด ๊ด€๊ณ„ ์—†์Œ


๋Œ€๋ถ€๋ถ„์˜ ์œ ํ–‰ํ•˜๋Š” ์„ ํƒ๊ธฐ๋Š” 10KB๊ฐ€ ๋„˜๋Š” ์ „์ฒด ์ƒ‰ ์ฒ˜๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ฐ€์ ธ์™”์ง€๋งŒ react-colorful ์†Œ๋Ÿ‰์˜ ์ˆ˜๋™ ์ตœ์ ํ™”๋œ ์ƒ‰ ๋ณ€ํ™˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜๋งŒ ์ œ๊ณตํ–ˆ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด, react-color ๋Š” 14.4KB์˜ ๋น„์šฉ๊ณผ ํŠธ๋ฆฌ ๋””๋”๋ง์„ ์ „ํ˜€ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๋“ฑ 11๊ฐœ์˜ ์˜์กด ํ•ญ๋ชฉ์„ ๋„์ž…ํ–ˆ์Šต๋‹ˆ๋‹ค.
์šฐ๋ฆฌ๋Š” ๊ฒฝ์Ÿ์ด ๊ฐ€์žฅ ๊ฐ€๋ณ๋‹ค๋Š” ๊ฒƒ์„ ํ™•๋ณดํ•˜๊ธฐ ์œ„ํ•ด tinycolor2 ์˜์กด์„ฑ์„ ์—†์• ๋Š” ๋ฐ ๋งŽ์€ ์‹œ๊ฐ„์„ ๋“ค์˜€๋‹ค.์ทจ์•ฝ์„ฑ ๋ฌธ์ œ์˜ ๋ฐœ์ƒ ๊ฐ€๋Šฅ์„ฑ์„ ์ฒ ์ €ํžˆ ์ค„์ธ ๊ฒƒ์€ ๋งํ•  ๊ฒƒ๋„ ์—†๋‹ค.

2. ์ˆ˜์—… ์—†์Œ


์–ด๋–ค ๋ฌผ๊ฑด์„ ๋ด‰์ธํ•ด์•ผ ํ•  ๋•Œ, ES6 ํด๋ž˜์Šค๋Š” ๋งค์šฐ ์ข‹์ง€๋งŒ, ์ž‘์€ JS ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋งŒ๋“ค๊ณ  ์‹ถ๋‹ค๋ฉด, ํด๋ž˜์Šค ์„ฑ๋ช…์€ ๋‹น์‹ ์˜ ๊ฐ€์žฅ ํฐ ์  ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.ํ˜„์žฌ ์ถ•์†Œ๊ธฐ๋Š” ES6 ํด๋ž˜์Šค ํ•„๋“œ์™€ ๊ตฌ์„ฑ์› ํ•จ์ˆ˜๋ฅผ ์ถ•์†Œํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ๋Œ€์ƒ์—์„œ ๋ฐฉ๋ฒ•์„ ํ˜ธ์ถœํ•  ๋•Œ ํด๋ž˜์Šค๋ฅผ ์ถ”์ ํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
์ด๊ฒƒ์ด ๋ฐ”๋กœ react-colorful ํ•จ์ˆ˜, ๊ธฐ๋Šฅ ๊ตฌ์„ฑ ์š”์†Œ์™€ ์—ฐ๊ฒฐ๋งŒ ํฌํ•จํ•˜๋Š” ์ด์œ ๋‹ค.
์ด๊ฒƒ๋„ ์šฐ๋ฆฌ์˜ ์„ ํƒ๊ธฐ ์†๋„๊ฐ€ ์ด๋ ‡๊ฒŒ ๋น ๋ฅธ ์›์ธ ์ค‘์˜ ํ•˜๋‚˜๋‹ค.

3. ๋‹ค๊ฐํ˜• ์ฑ„์šฐ๊ธฐ์™€ ์ถ”๊ฐ€ ์ฝ”๋“œ ๋ณ€ํ™˜ ์—†์Œ


์šฐ๋ฆฌ์˜ ๋ชฉํ‘œ๋Š” ํ˜„๋Œ€ ๋ธŒ๋ผ์šฐ์ €๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ „ํ†ต ๋ธŒ๋ผ์šฐ์ €๋„ ์ง€์›ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ๋Š” ์ฝ”๋“œ๊ฐ€ ์‹ฌ์ง€์–ด IE11๊ณผ ํ˜ธํ™˜๋˜๋„๋ก Babel์„ ์„ค์ •ํ–ˆ๋‹ค.
ํ˜„๋Œ€ ์–ธ์–ด ๊ธฐ๋Šฅ(์˜ˆ๋ฅผ ๋“ค์–ด react-colorful์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด ๋ณดํ†ต ์ตœ์ข… ์‚ฌ์šฉ์ž ์ฒดํ—˜์„ ์›๋ณธ ๊ฐœ๋ฐœ์ž ์ฒดํ—˜์œผ๋กœ ๋ฐ”๊พผ๋‹ค.์ด๋Ÿฌํ•œ ํ˜„๋Œ€ ๊ธฐ๋Šฅ์€ ๋” ์ข‹๊ณ  ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์“ฐ์ผ ์ˆ˜ ์žˆ์ง€๋งŒ, ๋น„๊ต์  ์˜ค๋ž˜๋œ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ „์†ก๋  ๋•Œ, ๊ทธ๋“ค์€ ํ†ต์ƒ์ ์œผ๋กœ ๋” ํฐ ๋ฌธ์žฅ์„ ๋งŒ๋“ค์–ด ๋‚ธ๋‹ค.
์ด๊ฒƒ์ด ๋ฐ”๋กœ ์šฐ๋ฆฌ์˜ ์›๋ณธ ์ฝ”๋“œ๊ฐ€ ํ˜„๋Œ€ ECMAScript ๊ธฐ๋Šฅ์— ์žˆ์–ด์„œ ์ด๋ ‡๊ฒŒ ์ดˆ๋ผํ•œ ์ด์œ ์ด๋‹ค.์˜ˆ๋ฅผ ๋“ค์–ด ์šฐ๋ฆฌ๋Š” async/await ์ด ์•„๋‹ˆ๋ผ Object.assign({}, color, { alpha }) ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.๋„ค, ์›๋ณธ ์ฝ”๋“œ๋Š” ๋” ์˜ค๋ž˜๋˜๊ณ  ์ƒ์„ธํ•œ API๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ดpolyfill์ด ๋ถ€์กฑํ•˜์—ฌ ๊ฐ€๋ฐฉ ํฌ๊ธฐ๊ฐ€ ์•ฝ 150๋ฐ”์ดํŠธ ๊ฐ์†Œํ–ˆ์Šต๋‹ˆ๋‹ค.

4. ์ˆ˜๋™ ์ตœ์ ํ™”


์šฐ๋ฆฌ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๋ชจ๋“  ๋ถ€๋ถ„์˜ ์ตœ์†Œ ๋ณ€ํ™”๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด size-limit ๋ฅผ ์„ค์น˜ํ•˜๊ณ  ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์„ ์‹œ๋„ํ–ˆ๋‹ค.
์ด๊ฒƒ์€ ๋ง๋กœ ํ‘œํ˜„ํ•˜๊ธฐ ์–ด๋ ค์›Œ์„œ ๋‚˜๋Š” ๋‹จ์ง€ ๋„ˆํฌ๋“ค๊ณผ ํ•˜๋‚˜์˜ ์˜ˆ๋ฅผ ๊ณต์œ ํ•  ๋ฟ์ด๋‹ค.
์šฐ๋ฆฌ๋Š” ๊ฐ’์„ ์ƒํ•œ์„ ๊ณผ ํ•˜ํ•œ ์‚ฌ์ด์— ๋ผ์šฐ๋Š” ๊ฐ„๋‹จํ•œ ํ•จ์ˆ˜๊ฐ€ ์žˆ๋‹ค.์ด ํ•จ์ˆ˜์˜ ์ฒซ ๋ฒˆ์งธ ๋ฒ„์ „์ž…๋‹ˆ๋‹ค.
export const clamp = (number, min = 0, max = 1) => {
  return Math.min(Math.max(number, min), max);
};
๊ทธ๋Ÿฌ๋‚˜ ๋ช‡ ์ฐจ๋ก€์˜ ์‹คํ—˜์„ ๊ฑฐ์นœ ํ›„์— ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฐ”๊พธ์—ˆ๋‹ค.
export const clamp = (number, min = 0, max = 1) => {
  return number > max ? max : number < min ? min : number;
};
๋‹น์‹ ์˜ ๋ˆˆ์€ ๋‹น์‹ ์„ ์†์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋” ๊ธด ์˜ต์…˜์„ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค.์™œ?์ถ•์†Œ๋กœ ๋‘ ๋ฒˆ์งธ ์ฝ”๋“œ๊ฐ€ ๊ฑฐ์˜ ๋‘ ๋ฐฐ๋กœ ์ค„์–ด๋“ค์—ˆ๋‹ค.์ฐธ์กฐ:
Math.min(Math.max(n,i),a)
n>a?a:n<i?i:n

โค๏ธ ์ฝ์–ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.


react Color๋Š” ํฌ๊ธฐ, ์„ฑ๋Šฅ, ์ ‘๊ทผ์„ฑ์— ๊ด€์‹ฌ์ด ์žˆ์Šต๋‹ˆ๋‹ค.๋‚˜๋Š” React ์ปค๋ฎค๋‹ˆํ‹ฐ๊ฐ€ ์šฐ๋ฆฌ์˜ ๊ฐ€์น˜๊ด€์„ ๊ณต์œ ํ•˜๊ณ  ์ง„์ผ๋ณดํ•œ ํ”„๋กœ์ ํŠธ์— ์œ ์šฉํ•˜๋‹ค๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌํ•˜๊ธฐ๋ฅผ ๋ฐ”๋ž€๋‹ค.
๋งŒ์•ฝ ๋‹น์‹ ์ด GitHub์—์„œ ํ™˜๋งค๋ฅผ ์‹œ์ž‘ํ•˜๊ฑฐ๋‚˜ ์นœ๊ตฌ์™€ ๋ณธ๋ฌธ์˜ ๋งํฌ๋ฅผ ๊ณต์œ ํ•œ๋‹ค๋ฉด ์ด๊ฒƒ์€ ์šฐ๋ฆฌ์—๊ฒŒ ํฐ ๋„์›€์ด ๋  ๊ฒƒ์ด๋‹ค๐Ÿ™

์›€๊ณ ๋น„์น˜ / ๋ฐ˜์‘์ด ๋‹ค์ฑ„๋กญ๋‹ค


๐ŸŽจ React ๋ฐ Preact ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์œ„ํ•œ ๋ฏธ์„ธ(2.5KB) ์ƒ‰์ƒ ์„ ํƒ๊ธฐ ๊ตฌ์„ฑ ์š”์†Œ









react color๋Š”react์™€ Preact ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ์ž‘์€ ์ƒ‰ ์„ ํƒ๊ธฐ ๊ตฌ์„ฑ ์š”์†Œ์ž…๋‹ˆ๋‹ค

ํŠน์ง•


  • ์ž‘์Œ: 2.5kb gzip(react color๋ณด๋‹ค 14๋ฐฐ ๋ฐ์Œ).

  • ํŠธ๋ฆฌ ํ”๋“ค๊ธฐ: ์‚ฌ์šฉํ•œ ๋ถ€๋ถ„๋งŒ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ํŒจํ‚ค์ง€๋กœ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

  • ์‹ ์†: ์—ฐ๊ฒฐ ๋ฐ ๊ธฐ๋Šฅ ๊ตฌ์„ฑ ์š”์†Œ๋กœ๋งŒ ๊ตฌ์ถ•๋ฉ๋‹ˆ๋‹ค.

  • ๋ฐฉํƒ„: ์—„๊ฒฉํ•œ ๊ธ€์”จ์ฒด๋กœ ์จ์„œ 40์—ฌ ์ฐจ๋ก€์˜ ํ…Œ์ŠคํŠธ๋ฅผ ๊ฑฐ์ณค๋‹ค.

  • ๊ฐ„๋‹จ: ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๊ฐ„๋‹จํ•˜๊ณ  ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฝ๋‹ค.

  • ๋ชจ๋ฐ”์ผ ์นœํ™”์„ฑ: ๋ชจ๋ฐ”์ผ ๋ฐ ํ„ฐ์น˜์Šคํฌ๋ฆฐ์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

  • ์•ก์„ธ์Šค ๊ฐ€๋Šฅ: ์•ˆ๋‚ด์„œ์— ๋”ฐ๋ผ ๋ณด์กฐ ๊ธฐ์ˆ ์„ ์ง€์›ํ•˜๋Š” ์‚ฌ์šฉ์ž.
  • ์˜์กด์„ฑ ์—†์Œ
  • ํ˜„์žฅ ํ”„๋ ˆ์  ํ…Œ์ด์…˜

  • WAI-ARIA
  • Website
  • HEX Color Picker (CodeSandbox)
  • ์„ค์น˜

    npm install react-colorful --save
    

    ํ™œ์šฉ๋‹จ์–ด์ฐธ์กฐ


    "react Color"์—์„œ {HexColorPicker} ๊ฐ€์ ธ์˜ค๊ธฐ;
    const YourComponent=()=>{
    const[color,setColor]=useState(#aabbccโ€);
    returnRGBA Color Picker (CodeSandbox)

    ์ข‹์€ ์›นํŽ˜์ด์ง€ ์ฆ๊ฒจ์ฐพ๊ธฐ