React-devtools: ๊ตฌ์„ฑ ์š”์†Œ ์ด๋ฆ„ ๋ˆ„๋ฝ

์— ๋งŒ๋“  2014๋…„ 01์›” 03์ผ  ยท  9์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: facebook/react-devtools

๊ตฌ์„ฑ ์š”์†Œ ์ด๋ฆ„์ด ํ•ญ์ƒ "์•Œ ์ˆ˜ ์—†์Œ"์ธ ์ด์œ ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

๋งŒ์ผ์˜ ๊ฒฝ์šฐ๋ฅผ ๋Œ€๋น„ํ•˜์—ฌ browserify๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ์†Œ์Šค๊ฐ€ ์ถ•์†Œ๋˜์ง€ ์•Š๊ณ  ์—ฐ๊ฒฐ๋งŒ ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณด์ž…๋‹ˆ๋‹ค.
image

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์ €๋Š” ํฌ๋กฌ ํ”Œ๋Ÿฌ๊ทธ์ธ React Developer Tools ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ React ํŠธ๋ฆฌ๋ฅผ ๊ฒ€์‚ฌํ•  ๋•Œ ๊ตฌ์„ฑ ์š”์†Œ์˜ ์‹ค์ œ ์ด๋ฆ„ ๋Œ€์‹  'ํ”„๋ก์‹œ ๊ตฌ์„ฑ ์š”์†Œ'๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. webpack ๋ฌธ์ œ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? 'displayName'์„(๋ฅผ) ์ถ”๊ฐ€ํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ์ง€๋งŒ ๊ทธ๋ ‡๊ฒŒ ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด์ด ๋ฌธ์ œ์— ๋ถ€๋”ช์ณค์Šต๋‹ˆ๊นŒ?

๋ชจ๋“  9 ๋Œ“๊ธ€

์ž, ์—ฌ๊ธฐ ๋น ๋ฅธ ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋…ธ์ถœ๋˜๋ฉด ์ด๋ฆ„์œผ๋กœ Unknown ๋ฉ๋‹ˆ๋‹ค.

exports.MyComponent = React.createClass({...});

๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์„ ๋ณ€๊ฒฝํ•˜๋ฉด ์ž‘๋™ํ•˜๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

var MyComponent = React.createClass({...});
exports.MyComponent = MyComponent;

ํ™•์žฅ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ํ™•์ธํ–ˆ์ง€๋งŒ tagName ์ด๋ฉฐ ์–ด๋–ป๊ฒŒ ์„ค์ •๋˜์–ด ์žˆ๋Š”์ง€ ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

JSX๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ํด๋ž˜์Šค์— displayName ์†์„ฑ์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

var MyComponent = React.createClass({
  displayName: 'MyComponent',
  ...
});

JSX๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์ž๋™์œผ๋กœ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. ๋ถˆํ–‰ํžˆ๋„ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์€ ์—†์Šต๋‹ˆ๋‹ค.

์˜ˆ, JSX๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋‹ค๋ฅธ ๋ฌธ์ œ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ exports.ComponentName = React.createClass() ์„ ์–ธ๋œ ๊ฒฝ์šฐ JSX ์ปดํŒŒ์ผ๋Ÿฌ๋Š” displayName ๊ธฐ์—ฌํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๊ทธ๊ฒƒ์„ ๋‹ด๋‹นํ•˜๋Š” ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค: https://github.com/facebook/react/blob/master/vendor/fbtransform/transforms/reactDisplayName.js#L37

JSX๋Š” ์ด๋ก ์ ์œผ๋กœ ํ˜•์‹๋„ ์ง€์›ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋Š” ES6 ํด๋ž˜์Šค ๋˜๋Š” ์ด์™€ ์œ ์‚ฌํ•œ ๊ฒƒ์œผ๋กœ ์ด๋™ํ•˜๋ฉด ์‚ฌ๋ผ์ง‘๋‹ˆ๋‹ค.

tagName์€ React ํ•ต์‹ฌ์— ์žˆ๋Š” DOM ๊ตฌ์„ฑ ์š”์†Œ์˜ ์ผ๋ถ€์ž…๋‹ˆ๋‹ค. displayName์ด ์—†์Šต๋‹ˆ๋‹ค.

pull ์š”์ฒญ์„ ๋ณด๋‚ด๋ ค๋ฉด ์—ฌ๊ธฐ์— ์›ํ•˜๋Š” ํ˜•์‹์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

https://github.com/facebook/react/blob/ab47e992155ec9c2455b02bf671e8dd92bd01055/vendor/fbtransform/transforms/reactDisplayName.js#L37 -L51

์•Œ๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ง€๊ธˆ์€ ์ˆ˜๋™ displayName ์ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ฒฝ์šฐ์— ๋Œ€ํ•ด ์ด๊ฒƒ์„ ์ˆ˜์ •ํ•ด์•ผ ํ•˜๋Š” https://github.com/facebook/react/pull/799 ๋ฅผ ๋ฐฉ๊ธˆ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

์ €๋Š” ํฌ๋กฌ ํ”Œ๋Ÿฌ๊ทธ์ธ React Developer Tools ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ React ํŠธ๋ฆฌ๋ฅผ ๊ฒ€์‚ฌํ•  ๋•Œ ๊ตฌ์„ฑ ์š”์†Œ์˜ ์‹ค์ œ ์ด๋ฆ„ ๋Œ€์‹  'ํ”„๋ก์‹œ ๊ตฌ์„ฑ ์š”์†Œ'๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. webpack ๋ฌธ์ œ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? 'displayName'์„(๋ฅผ) ์ถ”๊ฐ€ํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ์ง€๋งŒ ๊ทธ๋ ‡๊ฒŒ ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด์ด ๋ฌธ์ œ์— ๋ถ€๋”ช์ณค์Šต๋‹ˆ๊นŒ?

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰