์์ : DOM ๊ฐ์กฐ ํ์๊ฐ ์ฌ๋ผ์ง๋๋ค.
์ค์ : DOM ๊ฐ์กฐ ํ์๊ฐ ์ค๋จ๋ฉ๋๋ค.
์ด๊ฒ์ ํธ๋ฆฌ๊ฑฐํ๋ ๋ ์ฌ์ด ๋ฐฉ๋ฒ :
DevTools์์ ๋ค๋ฅธ ๊ฒ์ ์ง์คํ ๋๊น์ง ํ์ด๋ผ์ดํธ๋ ์ด์ "๊ณ ์ "๋ฉ๋๋ค.
TBH ์ด๊ฒ์ ๋ด ๋ง์์ ์์๋๋ ๋์์ ๋๋ค. ์๋ํ๋ฉด ๋ค์ดํฐ๋ธ ์์๊ฐ ํธ๋ฒ๋ง๋๊ฑฐ๋ ์ด์ ์ด ๋ง์ถฐ์ ธ์๋ ํ ๋ธ๋ผ์ฐ์ ์ ์์ ํจ๋์ดํ๋ ์ผ๊ณผ ์ผ์นํ๊ธฐ ๋๋ฌธ์ ๋๋ค. 1
์ํ๋ ๊ฒฝ์ฐ Tree
์ ์
๋ฐ์ดํธํ์ฌ ๋ช ์ด ํ์ ์๋ ์จ๊น์ ํ์ฑํ ํ ์ ์์ต๋๋ค.
https://github.com/facebook/react/blob/95bd7aad7daa80c381faa3215c80b0906ab5ead5/packages/react-devtools-shared/src/devtools/views/Components/Tree.js#L207 -L223
... hideAfterTimeout: true
์ฒ๋ผ SelectedElement
hideAfterTimeout: true
๋ ์ ๋ฌํฉ๋๋ค ...
https://github.com/facebook/react/blob/95bd7aad7daa80c381faa3215c80b0906ab5ead5/packages/react-devtools-shared/src/devtools/views/Components/SelectedElement.js#L75 -L89
1 ๋ ์ฌ์ด์ ์์ง๋ง ์ค์ํ ์ฐจ์ด์ ์ค ํ๋๋ ๊ธฐ๋ณธ ์์ ํจ๋์ด ๋ง์ฐ์ค ์์์ "๊ณ ์ ๋"๊ฐ์กฐ ํ์๋ฅผ ๋จ๊ธฐ์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ์ ์ฒด ๊ฐ๋ฐ์ ๋๊ตฌ ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ ๋ง์ฐ์ค๋ฅผ ๋ ์์ ์ ์ผ๋ก ๊ฐ์งํ๋ ๊ฒ์ผ๊น ์? ์ด๋ป๊ฒ ๋ ๋ ์ํ ์ ์์๊น์?
Firefox์์ ๊ฐ์กฐ ํ์๊ฐ ๋ฉ์ถ์ง ์๊ธฐ ๋๋ฌธ์ ์์๋๋ ๋์ ์ฌ๋ถ์ ๊ด๊ณ์์ด Firefox์ Chrome ๊ฐ์ ๋์์ด ์ผ์นํ์ง ์์ต๋๋ค.
๋ ์ฌ์ด์ ์์ง๋ง ์ค์ํ ์ฐจ์ด์ ์ค ํ๋๋ ๊ธฐ๋ณธ ์์ ํจ๋์ด ๋ง์ฐ์ค ์์์ "๊ณ ์ ๋"๊ฐ์กฐ ํ์๋ฅผ ๋จ๊ธฐ์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
์ดํดํ์ง ๋ชปํฉ๋๋ค. ์ด๊ฒ์ด ์ ๊ฐ ๋ฌธ์ ๋ฅผ ์ ๊ธฐ ํ ๋ด์ฉ์ ๋๋ค. :-) ๊ทธ๋ ์ต๋๋ค. ์ค์ํ ์ฐจ์ด์ ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๋๋ ๋งค์ผ์ด ๋ฌธ์ ๋ฅผ ๋ค๋ฃจ๊ณ ์๋ค.
... hideAfterTimeout๋ ์ ๋ฌํ๋ ค๋ฉด : SelectedElement์ฒ๋ผ true ...
๋ช ์ด ํ์ ํญ์ ๊ฐ์กฐ ํ์๊ฐ ์ ๊ฑฐ๋๋ ๊ฒ์ฒ๋ผ ๋ค๋ฆฝ๋๋ค. ๋ฐ๋ผ์์ด ๋ฌธ์ ๋ ํด๊ฒฐ๋์ง๋ง ๋ค๋ฅธ ๊ฒฝ์ฐ๋ ๋ ์ ํ๋ฉ๋๋ค. ๊ทธ๊ฒ์ ๋์๊ฒ ์์ฉ ๊ฐ๋ฅํ ํด๊ฒฐ์ฑ ์ฒ๋ผ ๋ณด์ด์ง ์์ต๋๋ค.
์ด์์ ์ผ๋ก, ๋ด๊ฐ ์ํ๋ ๊ฒ์ DevTools ์ธ๋ถ์ ์ปค์๋ฅผ ๋๋ ์๊ฐ ๊ฐ์กฐ ํ์๊ฐ ์์ ์ ์ผ๋ก ์ ๊ฑฐ๋๋ ๊ฒ ์ ๋๋ค. ๋ค์ดํฐ๋ธ์ฒ๋ผ.
"ํค๋ณด๋๋ฅผ ๊ณ์ ์ฌ์ฉํ๋ฉด ์ด๋จ๊น์"์ ๊ฐ์ ์์ธ์ ์ธ ๊ฒฝ์ฐ๊ฐ ์๋ค๋ ๊ฒ์ ์ดํดํ์ง๋ง ํญ์ ๋๋๋ฆฌ์ง๋ ์์ต๋๋ค. ๋์กฐ์ ์ผ๋ก,์ด ํน์ ๋ฒ๊ทธ (๋ก ๋ง์ฐ์ค์ ์ผ๊ด์ฑ ๋ฆฌ์ ๊ฐ์กฐ) ๋งค์ผ ์ฌ๋ฌ ๋ฒ ํ๊ฒฉํ๊ณ ์๋ค.
๋๋ ์ฌ๊ธฐ์ 30 ๋ถ์ ๋ณด๋๊ณ ์ ์ด๋ฒคํธ๊ฐ ์์๋์ง ์๋์ง์ ๋ํ ๋จผ ์๊ฐ์กฐ์ฐจํ์ง ๋ชปํ์ต๋๋ค. ํธ์ํฐ์ ๋ฌผ์ด ๋ณด์. https://twitter.com/dan_abramov/status/1222178476817633282
๋๋ Twitter ์์ ์ด๊ฒ์ ์ธ๊ธํ์ง๋ง devtools ์์ค๋ฅผ ํตํด ๋ง์ฐ์ค ์์ง์์ ์ฒ๋ฆฌํ๊ณ DOM ์์๋ฅผ ๊ฐ์กฐํ๋ ๋ฐฉ๋ฒ์ ํ์ ํ์ต๋๋ค.
hover ์ํ๊ฐ _onmousemove ํธ๋ค๋ฌ์์๋ devtools ์ ๋ฐ์ดํธ์ ์ฃผ์ ์ฅ์ ์ธ ๊ฒ ๊ฐ์ต๋๋ค. ์ด ํจ์๋ ํฅ๋ฏธ๋กญ๊ฒ๋ ๋ค๋ฅธ ์ด๋ฒคํธ ํธ๋ค๋ฌ๊ฐ ์ฐธ์กฐํ์ง ์๋ _highlightTreeElement ๋ฅผ ์ฐจ๋ก๋ก ํธ์ถํฉ๋๋ค.
๋ช ๊ฐ์ง ๋ค๋ฅธ ๋ฉ์๋ ( _onfocusout
, _onmouseleave
, _ondragstart
๋ฐ _reset
)๋ ์ด๋ฆ์์ ์ ์ ์๋ฏ์ด SDK.OverlayModel.hideDOMNodeHighlight()
๋ฅผ ํธ์ถํฉ๋๋ค. ๋ฉ์ธ ํ์ด์ง์์ ํ์ด๋ผ์ดํธ.
ํธ์ง : itemData ์ ํ์ฌ ๊ตฌํ์ด onMouseMove
๋ฐ onMouseLeave
์ ๋ฐ์ธ๋ฉ๋๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ์ด๋ฒคํธ ์ฒ๋ฆฌ๊ธฐ ์งํฉ์ ํธ์ถํ๊ณ ์ถ์์ต๋๋ค. devtools๊ฐ ๊ด์ฐฐํ๋ ์ถ๊ฐ ์ด๋ฒคํธ๋ ๋๋๊ทธํ๊ฑฐ๋ ๋ ๋ง์ ํฌ์ปค์ค ๋ณ๊ฒฝ ์ฒ๋ฆฌ๊ฐ ๊ด์ฌ์ฌ ์ธ ๊ฒฝ์ฐ ์ํฉ์ ์ข ๋ ๊ฒฌ๊ณ ํ๊ฒ ๋ง๋ค ์๋ ์์ต๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋๋ Twitter ์์ ์ด๊ฒ์ ์ธ๊ธํ์ง๋ง devtools ์์ค๋ฅผ ํตํด ๋ง์ฐ์ค ์์ง์์ ์ฒ๋ฆฌํ๊ณ DOM ์์๋ฅผ ๊ฐ์กฐํ๋ ๋ฐฉ๋ฒ์ ํ์ ํ์ต๋๋ค.
hover ์ํ๊ฐ _onmousemove ํธ๋ค๋ฌ์์๋ devtools ์ ๋ฐ์ดํธ์ ์ฃผ์ ์ฅ์ ์ธ ๊ฒ ๊ฐ์ต๋๋ค. ์ด ํจ์๋ ํฅ๋ฏธ๋กญ๊ฒ๋ ๋ค๋ฅธ ์ด๋ฒคํธ ํธ๋ค๋ฌ๊ฐ ์ฐธ์กฐํ์ง ์๋ _highlightTreeElement ๋ฅผ ์ฐจ๋ก๋ก ํธ์ถํฉ๋๋ค.
๋ช ๊ฐ์ง ๋ค๋ฅธ ๋ฉ์๋ (
_onfocusout
,_onmouseleave
,_ondragstart
๋ฐ_reset
)๋ ์ด๋ฆ์์ ์ ์ ์๋ฏ์ดSDK.OverlayModel.hideDOMNodeHighlight()
๋ฅผ ํธ์ถํฉ๋๋ค. ๋ฉ์ธ ํ์ด์ง์์ ํ์ด๋ผ์ดํธ.ํธ์ง : itemData ์ ํ์ฌ ๊ตฌํ์ด
onMouseMove
๋ฐonMouseLeave
์ ๋ฐ์ธ๋ฉ๋๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ์ด๋ฒคํธ ์ฒ๋ฆฌ๊ธฐ ์งํฉ์ ํธ์ถํ๊ณ ์ถ์์ต๋๋ค. devtools๊ฐ ๊ด์ฐฐํ๋ ์ถ๊ฐ ์ด๋ฒคํธ๋ ๋๋๊ทธํ๊ฑฐ๋ ๋ ๋ง์ ํฌ์ปค์ค ๋ณ๊ฒฝ ์ฒ๋ฆฌ๊ฐ ๊ด์ฌ์ฌ ์ธ ๊ฒฝ์ฐ ์ํฉ์ ์ข ๋ ๊ฒฌ๊ณ ํ๊ฒ ๋ง๋ค ์๋ ์์ต๋๋ค.