https://github.com/latobibor/antd-tryout/commit/e373cb5038d88bf73358a05c8b37e0369dbaf478
๊ฒฝ๊ณ ๊ฐ ํ์๋์ง ์์์ผํฉ๋๋ค.
console.log์ "๊ฒฝ๊ณ : StrictMode์์ findDOMNode๊ฐ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ต๋๋ค. findDOMNode๊ฐ StrictMode ๋ด์์๋ Wave์ ์ธ์คํด์ค๋ก ์ ๋ฌ๋์์ต๋๋ค. ๋์ ์ฐธ์กฐํ๋ ค๋ ์์์ ์ฐธ์กฐ๋ฅผ ์ง์ ์ถ๊ฐํ์ญ์์ค. ์ฐธ์กฐ ์ฌ์ฉ์ ๋ํด ์์ธํ ์์๋ณด๊ธฐ"๋ผ๋ ๊ฒฝ๊ณ ๋ฉ์์ง๊ฐ console.log์ ํ์๋ฉ๋๋ค. ์์ ํ๊ฒ ์ฌ๊ธฐ : "
| ํ๊ฒฝ | ์ ๋ณด |
| --- | --- |
| ๊ฐ๋ฏธ | 4.0.3 |
| ๋ฐ์ | 16.13.1 |
| ์์คํ
| Windows 8.1 |
| ๋ธ๋ผ์ฐ์ | ํฌ๋กฌ 80 |
๋ฌธ์ ์ ์์ธ์ <Button />
๊ตฌ์ฑ ์์์์ ๋น๋กฏ๋ฉ๋๋ค.
๋ฌธ์ ์ ํ์ผ์ ์ฐธ์กฐํ์ญ์์ค.
https://github.com/latobibor/antd-tryout/commit/e373cb5038d88bf73358a05c8b37e0369dbaf478#diff -b525f6f7c3584f9af17112d37dae3a42
์ํด
Strict ๋ชจ๋ antd v4.0.4์์ ๋์ผํ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
Warning: findDOMNode is deprecated in StrictMode. findDOMNode was passed an instance of Wave which is inside StrictMode. Instead, add a ref directly to the element you want to reference. Learn more about using refs safely here: https://fb.me/react-strict-mode-find-node
๋์ผํ๊ฑฐ๋ ์ ์์ ๊ดํ ํด๊ฒฐ์ฑ ์ด ์์ต๋๊น?
๋ฒํผ์ ์ํด ์๊ฒฉ ๋ชจ๋๋ฅผ ์ ๊ฑฐํ๋ ๊ฒ์ ๋ง๋ ์๋ฉ๋๋ค. ์ด๊ฒ์ ์์ ํด์ผํ๋ antd์ ํฉ๋ฒ์ ์ธ ๋ฌธ์ ์ ๋๋ค.
๊ฐ์ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค
# 9870๊ณผ ๊ฐ์ด ๋ง์ ๋ง์ด๊ทธ๋ ์ด์ ์ ์ํํด์ผํฉ๋๋ค.
https://ant.design/docs/react/use-in-typescript ๊ฐ์ด๋๋ฅผ ์ฌ์ฉํ์ฌ ์๋ก ์ค์น ํ ํ์๋ ๋์ผํฉ๋๋ค.
๊ฒฝ๊ณ : findDOMNode๋ StrictMode์์ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ต๋๋ค. findDOMNode์ StrictMode ๋ด๋ถ์์๋ Wave์ ์ธ์คํด์ค๊ฐ ์ ๋ฌ๋์์ต๋๋ค. ๋์ ์ฐธ์กฐํ๋ ค๋ ์์์ ์ง์ ์ฐธ์กฐ๋ฅผ ์ถ๊ฐํ์ญ์์ค. https://fb.me/react-strict-mode-find-node์์ refs๋ฅผ ์์ ํ๊ฒ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์์ธํ ์์๋ณด์ญ์์ค.
ReactDOM.render(
// <React.StrictMode>
<App />
// </React.StrictMode>,
,
document.getElementById('root')
);
๋๋ ๊ฐ์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ๊ณ ์น ์ ์๋์?
๋๋ ๊ฐ์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ๊ณ ์น ์ ์๋์?
๋์ผํ ๋ฌธ์ ๊ฐ ์์ง๋ง ๋ค๋ฅธ ๊ตฌ์ฑ ์์๋ฅผ ์ฌ์ฉํ๊ณ ์์ผ๋ฏ๋ก ๋ฌธ์ ๋ <Button />
๋ง์ด ์๋๋๋ค.
๋๋ ๊ฐ์ ๋ฌธ์ ๋ฅผ ๊ฐ์ง๊ณ ์๋ค. ๋๋ ์ฌ์ฉํ๊ณ ์๋ค ๋ฌธ์ ์ ๋ผ์ธ์<InputMask
mask='99/99/9999'
onFocus={onFocus} onBlur={onBlur}
defaultValue={fields.birthdate.value}
error={fields.birthdate.error}
helperText={fields.birthdate.helperText}
id='birthdate' name='birthdate' label='Birthdate MM/DD/YYYY'
type='tel' variant='filled' margin='dense'
>
{(inputProps) =>
<TextField {...inputProps} />
}
</InputMask>
์๊ฒฉ ๋ชจ๋๋ฅผ ๋นํ์ฑํํ๋ ๊ฒ์ ์ค์ ๋ก ์ต์ ์ด ์๋๋๋ค. ์ด ๋ฌธ์ ๋ฅผ ์ด๋ป๊ฒ ํด๊ฒฐํ ์ ์์ต๋๊น?
์๊ฒฉ ๋ชจ๋๋ฅผ ๋นํ์ฑํํ๋ ๊ฒ์ ์ค์ ๋ก ์ต์ ์ด ์๋๋๋ค. ์ด ๋ฌธ์ ๋ฅผ ์ด๋ป๊ฒ ํด๊ฒฐํ ์ ์์ต๋๊น?
์ด์ ๋ํ ๋ง์ด๊ทธ๋ ์ด์ ์ฝ๋์ ๊ธฐ์ฌํ์ญ์์ค.
SubMenu ๋ฐ Select ๊ตฌ์ฑ ์์์์๋์ด ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค.
๊ฒฝ๊ณ : ์๊ฒฉ ๋ชจ๋ ํธ๋ฆฌ ๋ด์์ ๋ ๊ฑฐ์ ์ปจํ ์คํธ API๊ฐ ๊ฐ์ง๋์์ต๋๋ค.
์ด์ API๋ ๋ชจ๋ 16.x ๋ฆด๋ฆฌ์ค์์ ์ง์๋์ง๋ง์ด๋ฅผ ์ฌ์ฉํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๋ฒ์ ์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์ ํด์ผํฉ๋๋ค.
๋ค์ ๊ตฌ์ฑ ์์๋ฅผ ์ ๋ฐ์ดํธํ์ญ์์ค. ํ์ ๋ฉ๋ด
๊ฐ์ ๊ฒฝ๊ณ ๋ฅผ ๋ฐ์์ต๋๋ค
๊ฐ์ ๋ฌธ์
๊ฐ์ ๋ฌธ์ ๋ :(
์ฌ๊ธฐ์์ ํ๋ ๋, ์ฅ์ ์ธ๊ณผ ํจ๊ป ์์
๊ฐ์ ๋ฌธ์
์ฌ๊ธฐ์๋ ๊ฐ์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
์ฌ๊ธฐ์๋ ๊ฐ์ ๋ฌธ์ ์ ๋๋ค. Ant ํ์ด ์ด๋ฏธ ํด๊ฒฐ์ฑ ์ ๊ฐ์ง๊ณ ์์ต๋๊น?
๋ฉ๋ด๋ ๋ํ ๋ค์ ๊ฒฝ๊ณ ๋ฅผ ์์ฑํฉ๋๋ค.
<Menu mode="horizontal" >
์ํ ๋ชจ๋๋ฅผ ์ ๊ฑฐํ๋ฉด ๊ฒฝ๊ณ ๊ฐ ์ฌ๋ผ์ง๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ๊ฒ์ ํด๊ฒฐ์ฑ
์ด ์๋๋๋ค.
๋๋ ์ด๊ฒ์ ๋ฆฌํฉํ ๋งํ๋ ๊ฒ์ด ํฐ ์ผ์ด ๋ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ฌ๋ฌ ๊ตฌ์ฑ ์์๋ฅผ ํํค์ณ ์ผ ํ ์๋ ์์ต๋๋ค.
Warning: findDOMNode is deprecated in StrictMode. findDOMNode was passed an instance of DOMWrap which is inside StrictMode. Instead, add a ref directly to the element you want to reference. Learn more about using refs safely here: https://fb.me/react-strict-mode-find-node
in ul (created by DOMWrap)
in DOMWrap (created by SubPopupMenu)
in SubPopupMenu (created by Connect(SubPopupMenu))
in Connect(SubPopupMenu) (created by Menu)
in Provider (created by Menu)
in Menu (created by Context.Consumer)
in InternalMenu (created by Context.Consumer)
"antd": "^4.1.5"
"react": "^16.13.1"
๊ฐ์ ๋ฌธ์ , ๋์ !!! ๋ถ๋.
@latobibor ์๋ ํ์ธ์. ์ฐ๋ฆฌ๋ ์์ ํ ๊ทํ์ ์ ์ / ํผ๋๋ฐฑ ๊ฐ์ด, ์ค์ ๊ฒ์ ํ์ํฉ๋๋ค ์ฐ๋ฆฌ์๊ฒ ๋์ด ์ค๊ธฐ ์์ฒญ์ ๋ณด๋ด ๊ทธ๊ฒ์ ์ํด. ์ ์ ํ ์ง์ (์๋ก์ด ๊ธฐ๋ฅ์ ๋ํ ๊ธฐ๋ฅ ์ง์ , ๋ฒ๊ทธ ์์ ๋ฐ ๊ธฐํ ๋ณ๊ฒฝ์ ๋ํ ๋ง์คํฐ)๋ก ๋์ด ์ค๊ธฐ ์์ฒญ์ ๋ณด๋ด ์ฃผ์๊ธฐ ๋ฐ๋๋๋ค ์ฑ์ฐ๊ธฐ ํ ์์ฒญ ์ฌ๊ธฐ์
์๋ ํ์ธ์ @latobibor, ์ฐ๋ฆฌ๋ ๊ทํ์ ์ ์ / ํผ๋๋ฐฑ์ ์ ์ ์ผ๋ก ๋์ํฉ๋๋ค.์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด Pull Request ๋ฅผ ์ญ์์ค . Pull Request๋ฅผ ์ฌ๋ฐ๋ฅธ ๋ธ๋์น (๊ธฐ๋ฅ ๋ธ๋์น์ ์ ๊ธฐ๋ฅ, โโ๋ค๋ฅธ ๊ธฐ๋ฅ์ ๋ง์คํฐ ๋ธ๋์น)๋ก ๋ณด๋ด ์ฃผ์๊ณ , Pull Request
๊ฐ์ ๋ฌธ์
index.js:1 Warning: findDOMNode is deprecated in StrictMode. findDOMNode was passed an instance of Wave which is inside StrictMode. Instead, add a ref directly to the element you want to reference. Learn more about using refs safely here: https://fb.me/react-strict-mode-find-node
in button (created by Context.Consumer)
in Wave (created by Context.Consumer)
in Button (at SignInPage/index.js:93)
in div (created by FormItemInput)
in div (created by FormItemInput)
in div (created by Context.Consumer)
in Col (created by FormItemInput)
in FormItemInput (created by FormItem)
in div (created by Context.Consumer)
in Row (created by FormItem)
in FormItem (at SignInPage/index.js:92)
in form (created by ForwardRef(Form))
in ForwardRef(Form) (created by ForwardRef(InternalForm))
in SizeContextProvider (created by ForwardRef(InternalForm))
in ForwardRef(InternalForm) (at SignInPage/index.js:43)
in div (at SignInPage/index.js:42)
in div (at SignInPage/index.js:33)
in div (created by Context.Consumer)
in Col (at SignInPage/index.js:32)
in div (created by Context.Consumer)
in Row (at SignInPage/index.js:31)
in SignInPage (at AuthLayout/index.js:14)
in Route (at AuthLayout/index.js:10)
in Switch (at AuthLayout/index.js:7)
in AuthLayout (at publicRoute.js:11)
in Route (at publicRoute.js:9)
in PublicRoute (at App.js:17)
in Switch (at App.js:16)
in Suspense (at App.js:15)
in Router (created by BrowserRouter)
in BrowserRouter (at App.js:14)
in div (at App.js:13)
in App (at src/index.js:9)
in StrictMode (at src/index.js:8)
๊ฐ์ ๋ฌธ์ ๋ก, ๋ค์๊ณผ ๊ฐ์ ๊ฐ๋จํ ๋ฐ๋ชจ๋ฅผ ํตํด typescript ์ฌ์ฉ ๋ฌธ์๋ฅผ ๋ฐ๋์ต๋๋ค.
const App = () => (
<div className="App">
<Button type="primary">Button</Button>
</div>
);
ํ์ง๋ง ์ฝ์์์ index.js:1 Warning: findDOMNode is deprecated in StrictMode. findDOMNode was passed an instance of Wave which is inside StrictMode. Instead, add a ref directly to the element you want to reference. Learn more about using refs safely here
์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค.
์ด๋ป๊ฒ ๊ณ ์น๋ ์ง?
React.StrictMode๋ฅผ ๋๊ณ ๊ฐ๋ฏธ ๋์์ธ ํ์ด์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ ํจํค์ง๋ฅผ ์ ๋ฐ์ดํธ ํ ๋๊น์ง ๊ธฐ๋ค๋ ค์ผํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ฌ๊ธฐ์ ๊ฐ์ ๋ฌธ์ , ๊ทธ๋ฆฌ๊ณ
์ฌ๊ธฐ์์ ํ๋ ๋, ์ฅ์ ์ธ๊ณผ ํจ๊ป ์์
,ํ์ง๋ง ์ฅ๊ธฐ์ ์ธ ํด๊ฒฐ์ฑ ์ด ์๋๊ธฐ๋ฅผ ์ ๋ง๋ก ๋ฐ๋๋๋ค.
๋ฐ๋ก ๊ทธ๊ฑฐ์ฃ
์ต์ ๋ฒ์ (antd 4.2.0)์์ ๋์ผํ ๋ฌธ์
๊ฐ์ ๋ฌธ์
index.js:1 Warning: findDOMNode is deprecated in StrictMode. findDOMNode was passed an instance of Wave which is inside StrictMode. Instead, add a ref directly to the element you want to reference. Learn more about using refs safely here: https://fb.me/react-strict-mode-find-node
+1
์ฌ๊ธฐ์ ๊ฐ์ ๋ฌธ์
.
์์ ์ ๋๋์ต๋๋ค! ๊ฐ์ฌํฉ๋๋ค antd ํ!
๊ฐ์ ๋ฌธ์
๊ทธ๋์ ์ด๋ค ํด๊ฒฐ์ฑ ?
ํ๋ ์ถ๊ฐ
๊ฐ์ ๋ฌธ์ .
์ด ๋ฌธ์ ๋ ํด๊ฒฐํ์ญ์์ค!
Button์์๋์ด ๋ฌธ์ ๋ฅผ ๋ณผ ์ ์์ต๋๋ค.
๊ณ ์ณ์ฃผ์ธ์
์ฌ๊ธฐ์์ ๊ฐ์ ๋ฌธ์ ์ ์ง๋ฉด
๋๋ ๊ฐ์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ๋๊ตฐ๊ฐ์ด ๋ฌธ์ ์ ๋ํด ์์ ํ๊ณ ์์ต๋๊น?
antd์ ๊ด๋ จ์ด์๋ ๊ฒ์ด ํ์คํฉ๋๊น? ๋๋ antd 3๋ก ์ ํํ์ง๋ง ์ฌ์ ํ ๊ฐ์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
์, ์ฌ์ฉํ๊ณ ์๊ธฐ ๋๋ฌธ
์ฌ๊ธฐ๋ ๋ง์ฐฌ๊ฐ์ง์ ๋๋ค. ์๋นํ ์๊ธํ ๋ฌธ์ ์ธ ๊ฒ ๊ฐ์ต๋๋ค. Ant D ์ด๋์์ด?
ํ์ฌ PR ์์ ์ค์ธ ์ฌ๋์ด ์์ต๋๊น? ํ๋ ์ฐ๊ธฐ ์์ํ ์ ์์ต๋๋ค
@caelinsutch ๋ด๊ฐ ์๋ ํ, ์๋ฌด๋.
์ฃผ์ ๋ฌธ์ ๋ findDOMNode ์ฌ์ฉ์ผ๋ก ์ธํด ์ด๊ฒ ๋๋ ์ด ํ๋
๋ค์์ ์ฌ์ฉํ์ฌ ํด๊ฒฐ ๋ ๋ฌธ์ :
๊ณต์ ์์ ์์ ์๊ฐ์ ์ป์์ต๋๋ค : https://ant.design/components/form-cn/
๊ทํ์ ์๊ฐ ์ ์ฌ๊ฑด์ ํด๊ฒฐํ์ง ๋ชปํ๋ค๊ณ ์๊ฐํฉ๋๋ค : https://github.com/ant-design/ant-design/issues/22493#issuecomment -619562638. ๊ทธ๋ฆฌ๊ณ ๋น์ ์ด ๋ฌด์์ ํ๋์ง๋ ์ ํ ์๋ ค์ง์ง ์์์ต๋๋ค. ๋น์ ์ด ๋ญ๊ฐ๋ฅผํ๋ค๋ฉด.
@CathyXian ์์์ ๋ชจ๋ ๋ฒํผ์ ๋ํํด๋ ๋๋ถ๋ถ์ ๊ฒฝ์ฐ <Button>
๊ตฌ์ฑ ์์๋ ์์์์ ์ฌ์ฉ๋์ง ์๊ณ ๋์ onClick
์ด๋ฒคํธ๊ฐ ์ฐ๊ฒฐ๋์ด ์๊ธฐ ๋๋ฌธ์ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์ง ์์ต๋๋ค.
@caelinsutch๊ฐ ์ง์ ํ๋ฏ์ด Wave ๊ตฌ์ฑ ์์๋ ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋ ๋ฉ์๋ findDOMNode๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ ๊ตฌ์ฑ ์์๋ฅผ ๋น ๋ฅด๊ฒ ํ์ธํ ๊ฒฐ๊ณผ
ํ๊ทธ https://github.com/ant-design/ant-design/blob/e1299bfcc97a97078c51f33ae939d815e4eacf7f/components/tag/index.tsx#L114 -L127
์จ์ด๋ธ ์ปดํฌ๋ํธ๋ฅผ ๋ฆฌํฉํ ๋งํ์ฌ ์ด์ ๋ฉ์๋๋ฅผ ์ ๊ฑฐํด์ผํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋ค๋ฅธ ๊ตฌ์ฑ ์์๋ ํด๋น ๋ฉ์๋๋ฅผ ์ ๊ฑฐํด์ผํฉ๋๋ค. https://github.com/ant-design/ant-design/search?q=findDOMNode&unscoped_q=findDOMNode
์ด๋ค ์ข ๋ฅ์ ์ด์ํ ์ด์ ๋ก ๋ค์๊ณผ ๊ฐ์ด ์ฌ์์ฐ๋์ง ์์ต๋๋ค.
<React.Suspense fallback={''}>
<App />
</React.Suspense>
์ด๋ค ์ข ๋ฅ์ ์ด์ํ ์ด์ ๋ก ๋ค์๊ณผ ๊ฐ์ด ์ฌ์์ฐ๋์ง ์์ต๋๋ค.
<React.Suspense fallback={''}> <App /> </React.Suspense>
๋๋ ์ด๊ฒ์ ์๋ํ๊ณ ๋งค๋ ฅ์ฒ๋ผ ์๋ํ์ง๋ง ๊ทธ ์ง๋ฌธ์ ์ฅ๊ธฐ์ ์ธ ํด๊ฒฐ์ฑ ์ ๋๊น?
์ด๋ค ์ข ๋ฅ์ ์ด์ํ ์ด์ ๋ก ๋ค์๊ณผ ๊ฐ์ด ์ฌ์์ฐ๋์ง ์์ต๋๋ค.
<React.Suspense fallback={''}> <App /> </React.Suspense>
์ด๊ฒ์ ๋จ์ง ๋ฉ ์ ๊ฑฐ ๋ค๋ฅด์ง ์์ต๋๋ค <React.StrictMode>
์ฝ <App>
. ํ์ํ์ง ์์์ผํฉ๋๋ค.
Tabs conponent์์๋ ๋ฐ์ํ์ต๋๋ค.
์ฌ๊ธฐ๋ ๋ง์ฐฌ๊ฐ์ง์
๋๋ค.
๋ ๋์ ์ฐ์ ์์๋ฅผ ๋ถ์ฌํด ์ฃผ์๊ฒ ์ต๋๊น?
๊ฐ์ ๋ฌธ์ ๐
์ฌ๊ธฐ์๋ ๊ฐ์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ๋๊ตฌ๋ ์ง ํด๊ฒฐ์ฑ ์ ์ฐพ์์ต๋๊น?
์ฌ๊ธฐ์๋ ๊ฐ์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ๋๊ตฌ๋ ์ง ํด๊ฒฐ์ฑ ์ ์ฐพ์์ต๋๊น?
์์์ ์ค๋ช ํ๋๋ก ์ฝ๋๋ฅผ ๋ฆฌํฉํ ๋งํ๋ ์๋ฃจ์ ์ด ์๋ค๋ ์๋ฏธ์ ๋๋ค. ์ด๋ฒ ์ฃผ ํ๋ฐ์ ์ดํด ๋ณด๊ฒ ์ต๋๋ค.
๊ฐ์ฌํฉ๋๋ค! ๋๋ ๊ฐ์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค!
๊ฐ์ ๋ฌธ์
๊ฐ์ ๋ฌธ์
`<Button
htmlType="button"
icon={<LoginOutlined />}
onClick={this.onLogin.bind(this)}
>
Welcome Back
</Button>`
์ฌ์ ํ์ด ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ htmlType ์์ฑ์ ์ฌ์ฉํ์ต๋๋ค. StrictMode ์ ๊ฑฐ๋ ํด๊ฒฐ์ฑ ์ด ์๋๋๋ค. @antd ์๋ฃจ์ ์ ์ ๊ณตํ์ญ์์ค.
๊ฐ์ ๋ฌธ์
๋ชจ๋ ์๋ฃจ์ , ๋์ผํ ๋ฌธ์ ....
SubMenu๋ฅผ ์ฌ์ฉํ๋ ๋์ ๋์ผํ ๋ฌธ์ .
"๋ฐ์": "^ 16.13.1",
"react-dom": "^ 16.13.1",
"antd": "^ 4.3.1",
form.item์์ ๋ฒํผ์ ์ฌ์ฉํ๋ ๊ฒ๊ณผ ๋์ผํ ๋ฌธ์
<Button type="primary" htmlType="submit" >
LOG IN
</Button>
์ด ๋ฌธ์ ์ ๋ํด ์ ๋ฐ์ ์ธ ์กฐ์ฌ๋ฅผํ์ง ์๋ ์ด์ ๋ ๋ฌด์์ ๋๊น? ๋ฟก๋ฟก
๊ฐ์ ๋ฌธ์ , ์ด๋ค ํด๊ฒฐ์ฑ ?
์์ง ๋ฉ๋ด์ ํ์ ๋ฉ๋ด์ ๋์ผํ ๋ฌธ์ ,
์ฌ๊ธฐ์๋ ๊ฐ์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. Button
๊ตฌ์ฑ ์์์์ ๋์ค์ง๋ง ์ค์ ๋ก componentDidMount
๋ฐ onTransitionStart
์ Wave
๊ตฌ์ฑ ์์์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. findDOMNode(this)
๋์ ref๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๊น?
๋๋
+1
+1
+1
๊ฐ๋ฐ์๊ฐ ๊ท์น์ ๋ฐ๋ฅด๊ณ ์ด๋ฉ์ผ์ ํตํด์ด ์ค๋ ๋๋ฅผ ๊ตฌ๋ ํ๋ ๋ชจ๋ ์ฌ๋์ ๊ดด๋กญํ๋ ๋ฐ +1์ ๋์ง ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. ๊ทธ๊ฒ์ ๋งค์ฐ ์ฑ ๊ฐ์๊ณ ๋น์ ๋ฌธ์ ์ ๋๋ค. @kreuzhofer @Lemii @moderndegree @TechieQian @lefterisk ๋ฐ ๊ธฐํ
Ant ๋์์ธ ๋ฉ๋ด๋ฅผ ์ฌ์ฉํ ๋๋ ๋์ผํ ๋ฌธ์
์ฌ๊ธฐ์ ๊ฐ์ ๋ฌธ์ . ์ต๋ํ ๋นจ๋ฆฌ ์์ ํด์ผํฉ๋๋ค
Ant Design Button์ ์ฌ์ฉํ ๋๋ ๋์ผํ ๋ฌธ์
+1
์ฌ๊ธฐ์๋ ๊ฐ์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
์ฌ๊ธฐ์์ ๊ฐ์ ๋ฌธ์ ๋ ์๊ฒฉ ๋ชจ๋๋ฅผ ๋ ํ์๊ฐ์๋ ์๋ฃจ์ ์ด๋ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ ๋ง ์ข์ํ ๊ฒ์ ๋๋ค.
๋๋ ๊ฐ์ ๋ฌธ์ ์ ์ง๋ฉดํ๊ณ ์์ต๋๋ค
์ฌ๊ธฐ์ ๊ฐ์ ๋ฌธ์
ํ์ ๋ฉ๋ด์ ๋์ผํ ๋ฌธ์
@Ant ํ, ๋๋ ์ด๊ฒ์ ์ด์ด๋๊ณ ๋ฌธ์ ๋ฅผ ์ ๊ทธ๊ณ ์์๊ฑฐํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ด๋ฌํ ์ถ๊ฐ +1๊ณผ ๋ ์ญ์ ๋ฌธ์ ํด๊ฒฐ์ ๋์์ด๋๋ ๊ฐ์น๊ฐ ์ ํ ์์ต๋๋ค. ๋์ ๋์ ๋๋ ์ ๋ฐ์ดํธ๋ฅผ ์ฐพ๋ ์ฌ๋๋ค์ ์ํด ์์๊ณผ ์คํธ์ ์์ฑํฉ๋๋ค. ๋๊ณ ์ถ๋ค๋ฉด ์ฝ๋ ๋ฆฌ๋ทฐ์ ๊ธฐ์ฌํ๊ณ ์๋ฅด์ธ์.
๋ชจ๋ ์ผ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค! :)
๋ฐฉ๊ธ React TypeScript ํ๋ก์ ํธ์ antd๋ฅผ ์ค์นํ๊ณ ๋ฒํผ์ ์ฌ์ฉํ์๋ง์ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค. ์ด๊ฒ์ ๋ํ ํด๊ฒฐ์ฑ ์ด ์๋ค๋ ๊ฒ์ ์๊ฒ๋์ด ์ฌํ๋ค.
ant.design ๋ฒํผ๋ ๋ง์ฐฌ๊ฐ์ง์
๋๋ค.
"antd": "^ 4.6.3",
"๋ฐ์": "^ 16.13.1",
"react-dom": "^ 16.13.1",
์ ๋ฐ์ดํธ๊ฐ ์์ต๋๊น? ์๋๋ฉด ํด๊ฒฐ ๋ฐฉ๋ฒ?
๊ฐ์ ๋ฌธ์
์ฝ๋์ ์ฒซ ๋ฒ์งธ ์ค์ ์ค๋ฅ๊ฐ๋ณด๊ณ ๋ฉ๋๋ค. . . ์์ง ์๋ฆฌ๋์ง ์์์ต๋๋ค. .
๋ด ํ๋ก์ ํธ์์ ๋ฒํผ์ ์ฌ์ฉํ ๋์ด ๋ฌธ์ ๋ฅผ ๋ฐ๊ฒฌํ์ต๋๋ค.
๋๋ "antd"์์๋ค : "^ 4.6.2"
๋ชจ๋ฌ์ ์ฌ์ฉํ์ฌ ์ฌ๊ธฐ์ ๋์ผํ ๋ฌธ์ .
2 ๊ฐ์ ๊ฒฝ๊ณ ๊ฐ ํ์๋ฉ๋๋ค.
`index.js : 1 ๊ฒฝ๊ณ : ์๊ฒฉ ๋ชจ๋์์ UNSAFE_componentWillReceiveProps๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๊ถ์ฅ๋์ง ์์ผ๋ฉฐ ์ฝ๋์ ๋ฒ๊ทธ๊ฐ ์์์ ๋ํ๋ผ ์ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ https://fb.me/react-unsafe-component-lifecycles ๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
๋งํผ ์ :
index.js:1 Warning: findDOMNode is deprecated in StrictMode. findDOMNode was passed an instance of AnimateChild which is inside StrictMode. Instead, add a ref directly to the element you want to reference.
์ด๋ค ์ ๋ฐ์ดํธ?
๊ฐ์ ๋ฌธ์ .
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด์ผํฉ๋๋ค.
๋ฒํผ์ ์ฌ์ฉํ ๋ 4.6.6์์๋ ์ฌ๊ธฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค.
์๊ฒฉํ ๋ชจ๋ ๊ฒ์ฌ๋ ๊ฐ๋ฐ ๋ชจ๋์์๋ง ์คํ๋ฉ๋๋ค. ํ๋ก๋์
๋น๋์ ์ํฅ์์ฃผ์ง ์์ต๋๋ค. ๋ฐ๋ผ์ ๋ฉ์์ง๊ฐ ์ฑ ๊ฐ์ค ์ ์์ต๋๋ค ...
๋ฌผ๋ก , ์ฃผ์์ ๋ฌ์์ฃผ๋ ๊ฒ์ ์ข์ ๋๋ต์ ์๋์ง๋ง, ๋ง์ฝ ๊ทธ๊ฒ์ด ๋น์ ์๊ฒ ํจ๊ณผ๊ฐ ์๋ค๋ฉด ํด๊ฒฐ์ฑ
์ ์ ์ ํ ์ ์์ต๋๊น?
๊ฐ๋ฏธ 4.6.6๊ณผ ๋์ผํ ๋ฌธ์ ์ ๋ฐ์ 16.13.1 :(
์ฌ๋ฌ๋ถ,์ด ์ค๋ฅ๊ฐ ๊ท์ฐฎ์ ๊ฒฝ์ฐ์ ๋ํ ์ ์ :
const isDev = process.env.NODE_ENV === 'development'
ReactDOM.render(
isDev ? <App /> : (
<React.StrictMode>
<App />
</React.StrictMode>
),
document.getElementById('root')
)
๊ฑด๋ฐฐ!
ํํ
๊ฐ๋ฐ ํ๊ฒฝ์์๋ง ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ์ํํ๋ฏ๋ก ๊ธฐ๋ณธ์ ์ผ๋ก StrictMode๋ฅผ ์ ๊ฑฐํ๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค. ๋ฐ๋ผ์ StrictMode๊ฐ ์ ํํ ๋ฌด์์ ์ํด ๋ง๋ค์ด ์ก๋์ง ์์ ์ ์ฝ๋์ ๋ํ ๋ชจ๋ ๊ฒ์ฌ๋ฅผ ๋นํ์ฑํํ์ต๋๋ค.
๊ฐ์ ๋ฌธ์ .
๊ฐ์ ๋ฌธ์ .
๊ฐ์ ๋ฌธ์
@ enoh-barbu ๋๋ ๋๊ตฌ๋ ์ด๊ฒ์ ๊ณ ์น๋ ค๊ณ ์ ๊ทน์ ์ผ๋ก ๋ ธ๋ ฅํ์ง ์๋๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ฝ์์ ์ด ๋ ์ค๋ฅ๊ฐ ํ์๋๋ ๊ฒ์ด ์ซ์ง๋ง,์ด ์ค๋ฅ๋ฅผ ์ํด ์๊ฒฉ ๋ชจ๋๋ฅผ ์ ๊ฑฐํ๋ ๊ฒ์ ๋ง๋ ์๋๋ ์ผ์ ๋๋ค.
์ชฝ์ผ๋ก
ํด๊ฒฐ์ฑ ์ด ์๋ค๋ฉด ์ด๋จ๊น์?
์ ์)
ํ)
์ง๊ธ๊น์ง ๊ฐ์ ๋ฌธ์ .
์ง๊ธ๊น์ง ๊ฐ์ ๋ฌธ์ .
์ง๊ธ๊น์ง ๊ฐ์ ํธ
์ฌ์ ํ ๊ฐ์ ๋ฌธ์ .
์ฌ์ ํ ๊นจ์ ธ
ํด๊ฒฐ์ฑ ์ด ์๋ค๋ฉด ์ด๋จ๊น์?
์ ์)
(ํฐ ์ด๋ฏธ์ง)ํ)
(ํฐ ์ด๋ฏธ์ง)
๋ ์ข์ ์ : ์ฝ์์ ๋ซ์ผ๋ฉด ๋ชจ๋ ๊ฒฝ๊ณ ๊ฐ ์ฌ๋ผ์ง๋๋ค ๐
๋๋ด ์ ์ณ๋๊ณ : ์ฌ๋ฌ ๊ตฌ์ฑ ์์ ์์๋์ด ๋ฌธ์ ์ ์ง๋ฉด
์ฌ์ ํ ๊ฐ์ ๋ฌธ์
React.StrictMode
์ ๊ฑฐ์ ๋์
์ค๋ ๋๋ฅผ ๋ฐ๋ฅด๋ ๋ชจ๋ ์ฌ๋์๊ฒ ์ง๋ฌธํ์ญ์์ค ... ์ด๊ฒ์ ์๋ฏธ (ํนํ ์ค๋ฅ)๋ฅผ ์๋ฏธํ๋ฉฐ ๋๊ตฐ๊ฐ๊ฐ ์ฝ๋๋ฅผ๋ณด๊ณ ์์ธ (๋๋ ์ค์ํ ์ด์ )์ ๋ณด์์ต๋๋ค. ์ ์งํ๊ฒ ๊ณ ์ณ ๋ณด๋ ค๊ณ ํ์ง๋ง, ์ ๊ทธ๋ฐ ์ผ์ด ๋ฐ์ํ๋์ง ๋๋ ์ฝ๋๋ฒ ์ด์ค์์ ์ค๋ฅ๊ฐ ์กด์ฌํ๋ ์์น๋ฅผ ์กฐ์ฌํ๊ณ ํ์ธํ ์๊ฐ (๋๋ ์ฝ๋๋ฒ ์ด์ค์ ๋ํ ์ง์)์ด ์์ต๋๋ค.
ํธ์ง : ๋ถ๋ช ํ ๋ด๊ฐ ์ค๋ฅ๋ฅผ ๊ฒฝํํ๋ค๋ ๊ฒ์ ์ถ๊ฐํด์ผํฉ๋๋ค (๋ช ์ผ ์ ์๋ ์์์ผ๋ฏ๋ก ์ค๋ฅ๋ฅผ ์ ๋ฐํ๋ ํน์ ์ํฉ์ด ๋ฌด์์ธ์ง ๊ถ๊ธํฉ๋๋ค. ์ฆ, ์ด๋ค ์ํฉ์์ ์ฌ์ฉ๋์ง ์๋ ๋ฉ์๋ findDOMNode๊ฐ ๋ฒํผ์ ์ ํ?)
์๋ง๋ ์ฐ๋ฆฌ๋ ๋จ์ํ "์, ์ค๋ฅ๊ฐ ์์ต๋๋ค. ์์ ํ์ญ์์ค"๋ผ๊ณ ๋งํ๋ ๊ฒ์ด ์๋๋ผ ๊ฒฝ๊ณ ๋ฅผ ๊ฒฝํํ๊ณ ๋ฌธ์ ํด๊ฒฐ์ ์์ํ๋ ๊ณต๋ ๋ ธ๋ ฅ ๋ฐ ๋์ด ์ํฉ์ผ๋ก์ด ์ค๋ ๋๋ฅผ ์ฒ๋ฆฌํด์ผํฉ๋๋ค.
๋ฟก ๋นต๋จ
๋๋ ์ฝ๋๋ฒ ์ด์ค์ ๋ํ ์ ๋ฌธ๊ฐ๋ ์๋์ง๋ง ๋ฒํผ ์์๋ฟ๋ง ์๋๋ผ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ๋๋ก ์์ฃผ ์ฌ์ฉํฉ๋๋ค. ์กฐ์ฌ์ ์ฝ๊ฐ์ ์๊ฐ์ ๋ณด๋๊ณ findDomNode์ ์ฃผ์ ์ฌ์ฉ์ด ์จ์ด๋ธ ๊ตฌ์ฑ ์์์์ ๋ฐ์ํ๋ค๋ ๊ฒ์ ๋ฐฐ์ ์ต๋๋ค. ์จ์ด๋ธ ๋? ๋ฒํผ ๊ตฌ์ฑ ์์์ ๊ฐ์ ๊ฒ๋ค์ ์ ๋๋ฉ์ด์
์ ์ ์ฉํ๋ ๋๊ตฌ๋ฅผ ์์ง ํ ์ ์์ต๋๋ค.
Strict ๋ชจ๋๋ฅผ ๋นํ์ฑํํ๋ ๊ฒ ์ธ์ (๋ ์ ์ ํ ์์ ์ ์ฌ์ฉํ ์์์ ๋๊น์ง ์์งํ๊ฑฐ๋ ์จ์ด๋ธ์ ๋ํด ๋ ๋ง์ด ๋ฐฐ์ธ ์๊ฐ์ด ์์ต๋๋ค ...) ์ฝ๋์ ๋ชจ์์์ ์ถ๊ฐํ๋ ๊ฒ์ด ๋ ์ฌ์ธ ์ ์์ต๋๋ค. ์ง๊ธ์ findDomNode ์ฌ์ฉ์ ์์ ํ ๋์ฒดํ๋ ๊ฒ๋ณด๋ค ์จ์ด๋ธ ์ฌ์ฉ์ ๋นํ์ฑํํ๊ธฐ ์ํด props๋ฅผ ์ฌ์ฉํ๋ PR. ์ฝ๊ฐ์ ์ธํฐ๋ท ๊ฒ์์ ์ด๊ฒ์ด ๋จ์ง ๊ฐ๋ฏธ ๋์์ธ ๋ฌธ์ ๊ฐ ์๋๋ผ๋ ๊ฒ์ ๋ณด์ฌ์ค ๊ฒ์ ๋๋ค (์ : https://stackoverflow.com/questions/61220424/material-ui-drawer-finddomnode-is-deprecated-in-strictmode). ๊ตฌํํ๊ธฐ ๊ฐ์ฅ ์ฌ์ด ์์ ์ด ์๋๊ฑฐ๋ ๋ค๋ฅธ ๋๊ตฐ๊ฐ๊ฐ ์ด๋ฏธ ๊ทธ๊ฒ์ ๋ฐ์ด ๋ค์์ ๊ฒ์ ๋๋ค. ๋ณ๊ฒฝ ์ฌํญ์ ๋ฒํผ์๋ง ์ํฅ์์ฃผ์ง ์๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฏธ ๋์์ธ ์ ์์๊ฐ ์ ์ ํ ์๋ฃจ์ ์ ์ฒ ์ ํ ํ ์คํธ ํ ์ ์๋๋ก ์ฐ์ ์์๋ฅผ ์ ํ ์๊ฐ์ด์์ ๋๊น์ง ๊ธฐ๋ค๋ ค์ผ ํ ์๋ ์์ต๋๋ค .... ๊ทธ๋ค์ ๋ชจ๋ ์์ ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ์ฌ๊ธฐ์์ ์ป์ผ์ญ์์ค. ๊ทธ๋์ ์ด๋ค ํด๊ฒฐ์ฑ ์ด ๋ ๊ฒ์ธ์ง๋ ๋๋จธ์ง์ ๋ง์ฐฌ๊ฐ์ง๋ก ์๋ํ๋ ๊ฒ์ด ๋ ๊ฒ์ด๋ผ๊ณ ํ์ ํฉ๋๋ค!
ํธ์งํ๋ค:
์ด๊ฒ์ด "์ฌ์ด ์์ "์ด ์๋ ์ด์ ๋ฅผ ๊ถ๊ธํดํ๋ ์ฌ๋์ ์ํด findDomNode๋ฅผ ๋ฒ๋ฆฌ๊ธฐ์ํ ๋ช ๊ฐ์ง ์ ์ ๋ ์๋ฃจ์
์ด ์์ต๋๋ค. https://medium.com/trabe/getting-rid-of-finddomnode-method-in-your-react-application-a0d7093b2660
์ฌ๋ฌ ๊ตฌ์ฑ ์์์ ์ํฅ์ ์ค๋ค๊ณ ๊ฐ์ ํ ๋์ด ์์
์ ๋๊ตฌ์๊ฒ๋ "์์ ๋ก์ด"์๊ฐ์ด์๋ ๊ฒ๋ณด๋ค ๋ ํฐ ์์
์ด ๋ ๊ฒ์
๋๋ค.
๊ฐ์ ๋ฌธ์
์ด ํฐ์ผ์ 7 ๊ฐ์ ์ด์ ์ด๋ ค ์์ต๋๋ค.
๊ฐ์
+1
์ด ํ๋ก์ ํธ์ ๊ท์น์ ๋ํด ์ ๋ชจ๋ฅด๊ฒ ์ง๋ง ๋ค๋ฅธ ์ปค๋ฎค๋ํฐ์์ "same"๋ฐ "+1"๋๊ธ์ ์คํธํ๋ ๊ฒ์ ๊ถ์ฅํ์ง ์์ต๋๋ค.
์๋ง๋ ์ฐ๋ฆฌ๋ ์ฃผ์ ์ด์์์ : +1 :์ ์ฌ์ฉํ์ฌ์ด ์ด์์ ๋ํ ์ง์์ ๊ฐ๋จํ ํํํ ์ ์์ต๋๋ค.
https://github.com/ant-design/ant-design/pull/27755 ์์ ์์ ๋์์ต๋๋ค.
์์ ์์
์ ํด์ฃผ์
์ ๊ฐ์ฌํฉ๋๋ค. ๋์๊ด์ด ๋ง์์ ๋ญ๋๋ค. ๋ถํํ๋ [email protected] ์์์ด ๊ฒฝ๊ณ ๊ฐ ๊ณ์ ํ์๋ฉ๋๋ค
์์ ๋ด๋ถ์์ ์
๋ ฅ์ ์ฌ์ฉํ ๋ ๋น๋๊ธฐ ์ ํจ์ฑ ๊ฒ์ฌ๊ธฐ๊ฐ ์คํ ๋ ํ์ ๋ง โโ๋ํ๋ฉ๋๋ค.
[email protected] ์ ๋์ผํ ๋ฌธ์ ๊ฐ
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋ฒํผ์ ์ํด ์๊ฒฉ ๋ชจ๋๋ฅผ ์ ๊ฑฐํ๋ ๊ฒ์ ๋ง๋ ์๋ฉ๋๋ค. ์ด๊ฒ์ ์์ ํด์ผํ๋ antd์ ํฉ๋ฒ์ ์ธ ๋ฌธ์ ์ ๋๋ค.