SEE Conf์์ 4.0 rc ๋ฒ์ ์ ์ถ์ํ์ต๋๋ค. ํ ๋ฌ์ด ๋๋ ํผ๋๋ฐฑ ์์ง ๋ฐ ์กฐ์ ํ 4.0์ ์ถ์ ํ ๋์
๋๋ค! ์ด ๊ธฐ๊ฐ ๋์ ํผ๋๋ฐฑ, ์ ์ ๋ฐ ๊ธฐ์ฌ๋ฅผ ์ ๊ณต ํ ๋ชจ๋ ์ฌ๋์๊ฒ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. rc
๋ฒ์ ์ ์ด๋ฏธ ํฌํจ ๋ ์
๋ฐ์ดํธ์ ์ต๊ทผ ์ฌ๊ธฐ์์ ์ผ๋ถ ์
๋ฐ์ดํธ๋ฅผ ๊ฒฐํฉํฉ๋๋ค. ์ ์ฒด ์
๋ฐ์ดํธ ๋ ๋ฌธ์๋ ์ฌ๊ธฐ์์ ์ฐพ์ ์ ์์ต๋๋ค . v4 ๋ฌธ์ ์ฃผ์ : https://ant.design
v3 ๋ฒ์ ์ 2019 ๋
12 ์์ 3.x-stable
๋ธ๋์น์ ๋ณํฉ๋์ด ์ ์ง ๊ด๋ฆฌ์ ๋ค์ด๊ฐ์ต๋๋ค. v3 ๋ฒ์ ์ ๋ํ ์ ์ง ๊ด๋ฆฌ ์์
์ ๋ฐ๋
๋์ ์ํ๋ฉ๋๋ค. ์ ๊ฒ ๋ง๊ฐ์ผ์ 2020 ๋
5 ์์
๋๋ค.
๊ธฐ๋ณธ ๋ฅ๊ทผ ๋ชจ์๋ฆฌ๋ฅผ 4px
์์ 2px
. ํ๋ ์์ฒด๋ ์ธ๋ถ ์ฌํญ์ด๋ฉฐ ์ค๊ฐ ๋ฐ ๋ฐฐ๊ฒฝ ์ฅ๋ฉด์์ ํจ์จ์ฑ์ ์ต์ฐ์ ์ผ๋ก ์๊ฐํ๋ฏ๋ก ์ธํฐํ์ด์ค์ ์๊ฐ์ ์ธ๋ถ ์ฌํญ์ ์ค์ด๊ณ ์ธํฐํ์ด์ค ์ ๋ณด ์ฝ๊ธฐ์ ํจ์จ์ฑ์ ํฅ์์ํต๋๋ค. ๋ํ ์ ๋ณด ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ๊ฐ์กฐํ๋ฉด์ ์ค์ ๊ทธ๋ฆผ์์ ๋ ์ผ๊ด๋๊ฒ ๊ทธ๋ฆผ์๋ฅผ ์กฐ์ ํ์ต๋๋ค.
v3 ๋ฒ์ ์ ๊ธฐ๋ฐ์ผ๋ก ์์ ์์คํ ์ ์ ๊ทธ๋ ์ด๋ํ์ผ๋ฉฐ v4๋ ์ด๋์ด ํ ๋ง๋ฅผ ์ ๊ณตํฉ๋๋ค. ํ์ด์ง์์ ํ ๋ง ์ ํ ๊ธฐ๋ฅ์ ํด๋ฆญํ๋ฉด ์ด๋์ด ํ ๋ง ํจ๊ณผ๋ฅผ ๋ณผ ์ ์์ต๋๋ค.
์ผ์์ ์ธ ์์ ์์ ์ผ๋ถ ์๋๋ฆฌ์ค์ ๊ฒฝ๋ ์ ํ ๊ตฌ์ฑ ์์๊ฐ ์์์ ๋ฐ๊ฒฌํ์ต๋๋ค. ๋ฐ๋ผ์ ๊ฐ๋ฐ์๊ฐ ์คํ์ผ์ ์ฌ์ ์ํ์ง ์๊ณ ์ด๋ฌํ ๊ตฌ์ฑ ์์๋ฅผ๋ณด๋ค ์ฝ๊ฒ โโํฌํจ ํ ์์๋ ์๋ก์ด ๊ฒฝ๊ณ์๋ ์คํ์ผ์ ์ ๊ณตํฉ๋๋ค.
Ant Design 3.0์ ์ด์ ๋ฒ์ ์ IE์ ํธํ๋๋๋ก ๋ง์ ๋ ธ๋ ฅ์ ๊ธฐ์ธ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ ๊ณ ํต๊ณ์ ๋ฐ๋ฅด๋ฉด ๊ธ๋ก๋ฒ ๋ฐ ๊ตญ๋ด IE9 / 10 ๋ธ๋ผ์ฐ์ ๋ Windows ์์คํ ์ ๋ฐ์ดํธ๋ก ์ธํด ์ถ์๋๊ณ ์์ต๋๋ค. 4.0์์ IE 9/10 ์ง์์ ์ค๋จํ์ต๋๋ค (๊ทธ๋ฌ๋ IE 11์ ๊ณ์ ์ง์ํ ์์ ์ ๋๋ค). ๋ฐ๋ผ์ ๊ณผ๊ฑฐ์ ์ผ๋ถ ์ ์ฑ๋ฅ ๊ตฌ์ฑ ์์๋ ์๋ก์ด css ๊ธฐ๋ฅ์ผ๋ก ์ฑ๋ฅ์ด ํฅ์๋ฉ๋๋ค.
๋์์ v4๊ฐ ์์กดํ๋ React์ ์ต์ ๋ฒ์ ๋ React 16.9๋ก ์ ๊ทธ๋ ์ด๋ํ์ต๋๋ค. ์ฆ, v4 ๋ฒ์ ์ ์ฝ๋๋ฅผ ๋จ์ํํ๊ธฐ ์ํด ๋ ๋ง์ ํํฌ๋ฅผ ์ ๊ณตํฉ๋๋ค.
๋ํ v3 ๋ฆด๋ฆฌ์ค์์ ๊ฒฝ๊ณ ๋ ์ผ๋ถ ์ค๋๋ API๋ฅผ ์ ๊ฑฐํ์ต๋๋ค. ํ์ฌ ํ๋ก์ ํธ๋ฅผ v3์ ์ต์ ๋ฒ์ ์ผ๋ก ์ ๊ทธ๋ ์ด๋ํ๊ณ ๊ฒฝ๊ณ ๋ฉ์์ง์ ๋ฐ๋ผ ์ง์ ์ค๋จ ๋ API๋ฅผ ์ ๋ฐ์ดํธํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
antd @ 3.9.0
์์๋ svg ์์ด์ฝ ( ์ svg ์์ด์ฝ์ ์ฌ์ฉํฉ๋๊น? )์ ๋์
ํ์ต๋๋ค. ๋ฌธ์์ด ์ด๋ฆ์ ์ฌ์ฉํ๋ ์์ด์ฝ API๋ ์์ฒญ์๋ก๋ ํ ์ ์์ผ๋ฏ๋ก svg ์์ด์ฝ ํ์ผ์ด ์์ ํ ๋์
๋์ด ํจํค์ง ์ ํ์ ํฌ๊ธฐ๊ฐ ํฌ๊ฒ ์ฆ๊ฐํฉ๋๋ค. 4.0์์๋ ํธ๋ฆฌ ํ๋ค๊ธฐ๋ฅผ ์ง์ํ๋๋ก ์์ด์ฝ ์ฌ์ฉ API๋ฅผ ์กฐ์ ํ์ฌ Antant์ ๊ธฐ๋ณธ ํจํค์ง ํฌ๊ธฐ๋ฅผ ์ฝ 150KB (Gzip)๋ก ์ค์์ต๋๋ค.
๊ธฐ์กด ์์ด์ฝ ์ฌ์ฉ์ ์ญ์ ๋ฉ๋๋ค.
import { Icon, Button } from 'antd';
const Demo = () => (
<div>
<Icon type="smile" />
<Button icon="smile" />
</div>
);
4.0์์๋ ์ฃผ๋ฌธํ์ผ๋ก ๋์ ๋ฉ๋๋ค.
import { Button } from 'antd';
// tree-shaking supported
- import { Icon } from 'antd';
+ import { SmileOutlined } from '@ant-design/icons';
const Demo = () => (
<div>
- <Icon type="smile" />
+ <SmileOutlined />
<Button icon={<SmileOutlined />} />
</div>
);
// or directly import
import SmileOutlined from '@ant-design/icons/SmileOutlined';
๋ํ gzip์ผ๋ก ์์ถ ๋ ๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ์ค์ด๊ธฐ ์ํด ์ผ๋ถ ๊ด๋ จ ์ข ์์ฑ๋ ์ ๊ฑฐํ์ต๋๋ค.
๊ณ ์ฃผํ ๊ตฌ์ฑ ์์ ์ธ Form์๋ ์ฝ๊ฐ ์ค๋ณต๋๋ API๊ฐ ์์ต๋๋ค. ์ฌ์ฉ์๋ Form.create์ HOC๋ฅผ ํตํด Form ์ธ์คํด์ค๋ฅผ ๊ฐ์ ธ ์์ form.getFieldDecorator๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌ์ฑ ์์์ ๋ํ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ ์ํํด์ผํฉ๋๋ค. ๋ํ ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ ๋ ๋๋ง๋ค ์ ์ฒด ์์์ด ๋ค์ ๋ ๋๋ง๋๋ฏ๋ก ๋น
๋ฐ์ดํฐ ์์์์ ์ฑ๋ฅ์ด ๊ฑฑ์ ๋ฉ๋๋ค. v4 ๋ฒ์ ์์ Form์ ์์ ์ธ์คํด์ค์ ํจ๊ป ์ ๊ณต๋ฉ๋๋ค. Form.Item์ name
์์ฑ์ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ง์ ๋ฐ์ธ๋ฉํ์ฌ ์ฝ๋๋ฅผ ๋จ์ํ ํ ์ ์์ต๋๋ค.
- const { form } = this.props;
- const onSubmit = () => {
- form.validateFields((err, values) => {
- if (!err) {
- console.log('Received values of form: ', values);
- }
- });
- };
+ const onFinish = (values) => {
+ console.log('Received values of form: ', values);
+ };
- <Form onSubmit={onSubmit}>
+ <Form onFinish={onFinish}>
- <Form.Item>
+ <Form.Item name="username">
- {getFieldDecorator('username')(
- <Input />,
- )}
+ <Input />
</Form.Item>
</Form>
๋๋ถ๋ถ์ ์๋๋ฆฌ์ค์์ ๊ฐ๋ฐ์๋ ์ค์ ๋ก ์์์ด ์ฑ๊ณต์ ์ผ๋ก ์ ์ถํ๋ ๊ฐ์๋ง ๊ด์ฌ์ด ์์์ ๋ฐ๊ฒฌํ์ต๋๋ค. ๋ฐ๋ผ์ ์์ ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ํต๊ณผ ํ ํ์ ๋ง โโ์คํ๋๋ onFinish
๋ฅผ ์ ๊ณตํ๋ฉฐ validateFields
๋ ๋ ์ด์ ํ์ํ์ง ์์ต๋๋ค.
๋ํ Form์ ์์ ์์ ๋ฅผ ์ ์ด ํ ์ ์๋๋ก ํํฌ ๋ฉ์๋ Form.useForm
๋ฅผ ์ ๊ณตํฉ๋๋ค.
const [form] = Form.useForm();
React.useEffect(() => {
form.setFieldValues({ ... });
});
<Form form={form} />
๋์์ ๋ชฉ๋ก ํ๋๋ฅผ ์ฝ๊ฒ ์ ์ด ํ ์ ์๋๋ก Form.List ๊ตฌ์ฑ ์์๋ฅผ ์ ๊ณตํฉ๋๋ค.
<Form.List name="names">
{(fields, { add, remove }) => (
<div>
{fields.map(field) => <Form.Item {...field}><Input /></Form.Item>}
<Button onClick={() => add(initialValue)}>Add</Button>
</div>
}
</Form.List>
ํธํ์ฑ์์ํ ์ต์ ์๊ตฌ ์ฌํญ์ ์กฐ์ ํ๊ธฐ ๋๋ฌธ์ sticky
์คํ์ผ์ ์ฌ์ฉํ๋ ๊ณ ์ ์ด ๊ตฌํ์ผ๋ก ๋ณ๊ฒฝํ์ฌ ์์์ ๊ณ ์ ์ด์ด์์ ๋ ์ฑ๋ฅ ์๋น๋ฅผ ํฌ๊ฒ ์ค์์ต๋๋ค. sticky
์ง์ํ์ง ์๋ IE 11์ ๊ฒฝ์ฐ ๋ค์ด ๊ทธ๋ ์ด๋ ์ฒ๋ฆฌ๊ฐ ์ ์ฉ๋ฉ๋๋ค.
๋์์ ์์ฝ ๋ผ์ธ์ ํจ๊ณผ๋ฅผ ์ป๊ธฐ ์ํด ์๋ก์ด summary
API๋ฅผ ์ ๊ณตํฉ๋๋ค.
๋ถ๋ฅ๊ธฐ๋ ๋ค์ค ์ด ์ ๋ ฌ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
๋ํ fixedColumn
, expandable
๋ฐ scroll
๋ฅผ ํผํฉ ํ ์ ์๋๋ก ๊ธฐ๋ณธ ๋
ผ๋ฆฌ๋ฅผ ์กฐ์ ํ์ต๋๋ค. ๊ฐ์ ์คํฌ๋กค๊ณผ ๊ฐ์ ํจ๊ณผ๋ฅผ ๊ตฌํํ ์์๋ ํ
์ด๋ธ ์ปจํ
์ธ ๊ตฌํ์ ์ฌ์ฉ์ ์ ์ํ๊ธฐ์ํ body
API๋ฅผ ์ ๊ณตํฉ๋๋ค.
๋ ์ง ๊ตฌ์ฑ ์์๋ฅผ ์ ์ฒด์ ์ผ๋ก ๋ค์ ์์ฑํ์ฌ moment
์์ ๋ถ๋ฆฌํ์ต๋๋ค. ์ฐ๋ฆฌ๊ฐ ์ ๊ณตํ๋ generate
๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์ ์ง์ ๋ ์ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํ ์ ํ๊ธฐ ๊ตฌ์ฑ ์์๋ฅผ ์์ฑ ํ ์ ์์ต๋๋ค. ํธํ์ฑ์ ์ ์งํ๊ธฐ ์ํด ๊ธฐ๋ณธ Picker ๊ตฌ์ฑ ์์๋ ์ฌ์ ํ moment
๋ฅผ ๋ ์ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ์ฌ์ฉํฉ๋๋ค. ๋ง์ถค ๋ ์ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ฌ๊ธฐ ๋ฅผ ์ฐธ์กฐํ์ธ์.
๋ํ ์๊ฐ, ๋ ์ง, ์ฃผ, ์, ์ฐ๋ ์ ํ๊ธฐ ๋ฐ ํด๋น ๋ฒ์ ์ ํ๊ธฐ์ ์ ์ฒด ์ธํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ชจ๋์ ์ ์ด ๋ ๋ฐฉ๋ฒ์ ํตํด ํน์ ์ ํ๊ธฐ๋ฅผ ๊ตฌํํ๋ ๋์ ์ ํ๊ธฐ ์์ฑ์ ํตํด ์ค์ ํ ์ ์์ต๋๋ค.
<RangePicker />
<RangePicker showTime />
<RangePicker picker="week" />
<RangePicker picker="month" />
<RangePicker picker="year" />
๋ฒ์ ์ ํ๊ธฐ์ ๊ฒฝ์ฐ ์ํธ ์์ฉ๋ ์ต์ ํํ์ต๋๋ค. ์ด์ ์์ ๋๋ ์ข ๋ฃ ์๊ฐ์ ๊ฐ๋ณ์ ์ผ๋ก ์ ํํ ์ ์์ผ๋ฉฐ ์๋ ๋ ์ง ์ ๋ ฅ ํ๊ฒฝ์ ์๋ฒฝํ๊ฒ ์ต์ ํํฉ๋๋ค.
๊ณผ๊ฑฐ์๋ Modal.xxx
๋ฐ Notification.xxx
ํธ์ถ ๋ฉ์๋๊ฐ ์ปจํ
์คํธ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๋ค๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ ์ ์์ต๋๋ค. ์ด๋ ์ด๋ฌํ ๊ตฌ๋ฌธ ์คํ์ ๋ํด ReactDOM.render
๋ฅผ ํตํด ์ถ๊ฐ๋ก React ์ธ์คํด์ค๋ฅผ ์์ฑ ํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์ปจํ
์คํธ ์์ค ๋ฌธ์ ๋ ๋ฐ์ํฉ๋๋ค. ์ ๋ฒ์ ์์๋ ์ปจํ
์คํธ๋ฅผ ๊ฐ์ ธ์์ผํ๋ ๊ณณ์ ๋
ธ๋๋ฅผ ์ฝ์
ํ ์์๋ hooks ๋ฉ์๋๋ฅผ ์ ๊ณตํฉ๋๋ค.
const [api, contextHolder] = notification.useNotification();
return (
<Context1.Provider value="Ant">
{/* contextHolder is in Context1 which mean api will not get context of Context1 */}
{contextHolder}
<Context2.Provider value="Design">
{/* contextHolder is out of Context2 which mean api will not get context of Context2 */}
</Context2.Provider>
</Context1.Provider>
);
v4์์๋ Tree, TreeSelect ๋ฐ Select๊ฐ ์ ๋ฐ์ดํธ๋์์ต๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ๊ฐ์ ์คํฌ๋กค ๊ธฐ์ ์ ์ฌ์ฉํ์ฌ ์ฑ๋ฅ์ ์ต์ ํํ์ฌ ๋ง์ ์์ ์ต์ ๋ ๋๋ง์ ์ํํฉ๋๋ค.
๋ํ ํค๋ณด๋ ์ํธ ์์ฉ ๋ฐ ์ ๊ทผ์ฑ์ด ์ต์ ํ๋ฉ๋๋ค.
direction
rtl
์ธ์ด ๊ตญ์ ํ๋ฅผ ์ง์ํ๊ธฐ ์ํด direction
๊ตฌ์ฑ์ ์ ๊ณตํฉ๋๋ค.size
์ค์ ์ ์ง์ํฉ๋๋ค.suffix
์์ฑ์ ์ถ๊ฐํฉ๋๋ค.steps
ํ์ ๊ตฌ์ฑ ์์๋ฅผ ์ถ๊ฐํฉ๋๋ค.onResize
์ง์ํฉ๋๋ค.flex
๋ ์ด์์์ ์ฌ์ฉํฉ๋๋ค.์ฌ๊ธฐ ๋ฅผ ํด๋ฆญํ๋ฉด ์ ์ฒด ์ ๋ฐ์ดํธ ๋ก๊ทธ๋ฅผ ๋ณผ ์ ์์ต๋๋ค.
๊ฐ๋ฅํ ํ ์ฝ๊ฒ ์ ๊ทธ๋ ์ด๋ ํ ์ ์๋๋ก ์ต๋ ํธํ์ฑ์ ์ ์งํฉ๋๋ค. ๊ทธ๋ฌ๋์ฃผ์๊ฐ ํ์ํ ๋ช ๊ฐ์ง ์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ์ด ์์ต๋๋ค. ๋จผ์ ๋น์ฌ์์ ์ ๊ณตํ๋ codemod ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ง์ด๊ทธ๋ ์ด์ ์ ์๋ํ๊ณ ๋ง์ด๊ทธ๋ ์ด์ ํ ์์๋ ์ผ๋ถ ๋ถ๋ถ์ ์๋์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ ์ ์์ต๋๋ค. ์ ๊ทธ๋ ์ด๋์ ๋ํ ๋ฌธ์ ๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
Ant Design 4.0์ ํ์์ ์ปค๋ฎค๋ํฐ ์์ ๋ด์ฌ์์ ๊ธฐ์ฌ์ ์ง์๊ณผ ๋ถ๋ฆฌ ๋ ์ ์์ต๋๋ค. rtl
์ ๊ตญ์ ํ์ ๋ํด @saeedrahimi , @shaodahong ํธํ ๊ธฐ๋ฅ ํฉ์ ๋ํ ๊ธฐ์ฌ ๋ฐ ๊ฐ๋ฐ ์ง์์ ๊ด๋ จ๋ ๋ชจ๋ ์ฌ๋์๊ฒ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. Ant Design์ ๋์ฑ ์ข๊ฒ ๋ง๋๋ ๊ฒ์ ์คํ ์์ค์ ๋ํ ๊ทํ์ ๊ณตํ์
๋๋ค!
SEE Conf๋ฅผ ๊ณ๊ธฐ๋ก 4.0 rc
๋ฒ์ ์ ์ถ์ํ์ต๋๋ค. ํ ๋ฌ์ด ๋๋ ํผ๋๋ฐฑ ์์ง ๋ฐ ์กฐ์ ๋์ ๋ง์นจ๋ด ๊ณต์ ๋ฒ์ 4.0์ด ๋์
๋์์ต๋๋ค! ์ด ๊ธฐ๊ฐ ๋์ ํผ๋๋ฐฑ, ์ ์ ๋ฐ ๊ธฐ์ฌ๋ฅผ ์ ๊ณต ํ ๋ชจ๋ ์ฌ๋์๊ฒ ๊ฐ์ฌํฉ๋๋ค. rc
๋ฒ์ ์ ์ด๋ฏธ ํฌํจ ๋ ์
๋ฐ์ดํธ์ ์ฌ๊ธฐ์ ์ด๊ฑฐ ํ ๋ ์ค์ํ ์๋ก์ด ์ถ๊ฐ ์ฌํญ์ ๊ฒฐํฉ ํ ๊ฒ์
๋๋ค. ์ ์ฒด ์
๋ฐ์ดํธ ๋ ๋ฌธ์๋ ์ฌ๊ธฐ๋ฅผ ํด๋ฆญํ์ญ์์ค . v4 ๋ฌธ์ ์ฃผ์ : https://ant.design
v3 ๋ฒ์ ์ 2019 ๋
12 ์์ 3.x-stable
๋ธ๋์น์ ๋ณํฉ๋์ด ์ ์ง ๊ด๋ฆฌ ์ํ๊ฐ๋์์ต๋๋ค. v3 ๋ฒ์ ์ ๋ฐ๋
๋์ ์ ์ง๋ฉ๋๋ค. ์ ๊ฒ ๋ง๊ฐ์ผ์ 2020 ๋
5 ์์
๋๋ค.
๊ธฐ๋ณธ ํ๋ ์ 4px
์์ 2px
. ์ค๊ฐ ๋ฐ ๋ฐฑ์๋ ์ ํ์ ํจ์จ์ฑ์ ์ต์ฐ์ ์ผ๋ก ์๊ฐํ๊ณ ๋ฅ๊ทผ ๋ชจ์๋ฆฌ ์คํ์ผ์ UI์ ์ค์ํ ์ธ๋ถ ์ฌํญ์
๋๋ค. ๋ฅ๊ทผ ๋ชจ์๋ฆฌ๊ฐ ์์์๋ก ์ธํฐํ์ด์ค ์ธ๋ถ ์ฌํญ์ด ์๊ฐ์ ์ผ๋ก ์ค์ด๋ค๊ณ ์ ๋ณด ์ฝ๊ธฐ์ ํจ์จ์ฑ์ด ํฅ์๋ฉ๋๋ค. ๋ํ ๊ทธ๋ฆผ์๋ฅผ ์ค์ ๊ทธ๋ฆผ์์ ๋ ๊ฐ๊น๊ฒ ๋ง๋ค๊ณ ๋์์ ์ ๋ณด ์์ค์ ๋ ์ ๋ฐ์ํ๋๋ก ๊ทธ๋ฆผ์๋ฅผ ์กฐ์ ํ์ต๋๋ค.
v3 ๋ฒ์ ์ ๊ธฐ๋ฐ์ผ๋ก ์์ ์์คํ ์ ์ ๊ทธ๋ ์ด๋ํ์ผ๋ฉฐ v4๋ ์ด๋์ด ํ ๋ง๋ฅผ ์ ๊ณตํฉ๋๋ค. ํ์ด์ง์์ ํ ๋ง ์ ํ ๊ธฐ๋ฅ์ ํด๋ฆญํ์ฌ ์ด๋์ด ํ ๋ง ํจ๊ณผ๋ฅผ ๋ณผ ์ ์์ต๋๋ค.
๋น์ฆ๋์ค์์ ์ฐ๋ฆฌ๋ ์ผ๋ถ ์๋๋ฆฌ์ค์์ ๊ฐ๋ฒผ์ด ์ ํ ๊ตฌ์ฑ ์์๊ฐ ์์์ ๋ฐ๊ฒฌํ์ต๋๋ค. ๋ฐ๋ผ์ ๊ฐ๋ฐ์๊ฐ ์คํ์ผ์ ๋ฎ์ด ์ฐ์ง ์๊ณ ๋ ์ด๋ฌํ ๊ตฌ์ฑ ์์๋ฅผ ๋ ์ฝ๊ฒ ํฌํจ ํ ์์๋ ์๋ก์ด ๊ฒฝ๊ณ์๋ ์คํ์ผ์ ์ ๊ณตํฉ๋๋ค.
Ant Design 3.0์ ์ด์ ๋ฒ์ ์ IE์ ํธํ๋๋๋ก ๋ง์ ๋ ธ๋ ฅ์ ๊ธฐ์ธ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ ๊ณ ํต๊ณ์ ๋ฐ๋ฅด๋ฉด IE9 / 10 ๋ธ๋ผ์ฐ์ ์ ๊ธ๋ก๋ฒ ๋ฐ ๊ตญ๋ด ์ ์ ์จ์ Windows ์์คํ ์ ๋ฐ์ดํธ๋ก ์ธํด ์ค์ด๋ค๊ณ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ๋ฒ์ 4.0์ ์์ผ๋ฉฐ IE 9/10 ์ง์์ ์ค๋จํฉ๋๋ค (๊ทธ๋ฌ๋ IE 11์ ๊ณ์ ์ง์ํฉ๋๋ค). ๋ฐ๋ผ์ ๊ณผ๊ฑฐ์ ์ผ๋ถ ์ ์ฑ๋ฅ ๊ตฌ์ฑ ์์๋ ์๋ก์ด CSS ๊ธฐ๋ฅ์ผ๋ก ์ฑ๋ฅ์ด ํฅ์๋ฉ๋๋ค.
๋์์ v4๊ฐ ์์กดํ๋ React์ ์ต์ ๋ฒ์ ๋ React 16.9๋ก ์ ๊ทธ๋ ์ด๋ํ์ต๋๋ค. ์ฆ, v4 ๋ฒ์ ์ ์ฝ๋๋ฅผ ๋จ์ํํ๊ธฐ ์ํด ๋ ๋ง์ ํํฌ๋ฅผ ์ ๊ณตํฉ๋๋ค.
๋ํ v3 ๋ฒ์ ์์ ๊ฒฝ๊ณ ๋ ์ผ๋ถ ์ค๋๋ API๋ ์ ๊ฑฐํ์ต๋๋ค. ํ์ฌ ํ๋ก์ ํธ๋ฅผ v3์ ์ต์ ๋ฒ์ ์ผ๋ก ์ ๊ทธ๋ ์ด๋ํ๊ณ ๊ฒฝ๊ณ ์ ๋ณด์ ๋ฐ๋ผ ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋ API๋ฅผ ์ ๋ฐ์ดํธํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
[email protected]
์์๋ svg ์์ด์ฝ์ ๋์
ํ์ต๋๋ค ( ์ svg ์์ด์ฝ์ ์ฌ์ฉํฉ๋๊น? ). ๋ฌธ์์ด ์ด๋ฆ ์ง์ ์ ์ฌ์ฉํ๋ ์์ด์ฝ API๋ ์์ฒญ์๋ก๋ ํ ์ ์์ผ๋ฏ๋ก svg ์์ด์ฝ ํ์ผ์ด ์์ ํ ๋์
๋์ด ํจํค์ง ์ ํ์ ํฌ๊ธฐ๊ฐ ํฌ๊ฒ ์ฆ๊ฐํฉ๋๋ค. 4.0์์๋ ์์ด์ฝ ์ฌ์ฉ API๋ฅผ ์กฐ์ ํ์ฌ ํธ๋ฆฌ ํ๋ค๊ธฐ๋ฅผ ์ง์ํ๊ณ antd ๊ธฐ๋ณธ ํจํค์ง ํฌ๊ธฐ๋ฅผ ์ฝ 150KB (Gzip)๋ก ์ค์์ต๋๋ค.
์ด์ ๋ฒ์ ์ ์์ด์ฝ ์ฌ์ฉ์ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ต๋๋ค.
import { Icon, Button } from 'antd';
const Demo = () => (
<div>
<Icon type="smile" />
<Button icon="smile" />
</div>
);
4.0์์๋ ์ฃผ๋ฌธํ ๋์ ๋ฐฉ๋ฒ์ด ์ฑํ๋ฉ๋๋ค.
import { Button } from 'antd';
// tree-shaking supported
- import { Icon } from 'antd';
+ import { SmileOutlined } from '@ant-design/icons';
const Demo = () => (
<div>
- <Icon type="smile" />
+ <SmileOutlined />
<Button icon={<SmileOutlined />} />
</div>
);
// or directly import
import SmileOutlined from '@ant-design/icons/SmileOutlined';
๋ํ ํจํค์ง ํฌ๊ธฐ (Gzipped)๋ฅผ ์ค์ด๊ธฐ ์ํด ๊ด๋ จ ์ข ์์ฑ์ ๊ฐ์ํํ์ต๋๋ค.
Form์ ์์ฃผ ์ฌ์ฉ๋๋ ๊ตฌ์ฑ ์์์ด๋ฉฐ ํด๋น API๋ ์ฝ๊ฐ ์ค๋ณต๋ฉ๋๋ค. ์ฌ์ฉ์๋ Form.create
์ HOC ๋ฉ์๋๋ฅผ ํตํด ์์ ์ธ์คํด์ค๋ฅผ ๊ฐ์ ธ ์์ form.getFieldDecorator
๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๊ตฌ์ฑ ์์์ ๋ฐ์ธ๋ฉํด์ผํฉ๋๋ค. ๋ํ ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ ๋ ๋๋ง๋ค ์ ์ฒด ์์์ด ๋ค์ ๋ ๋๋ง๋๋ฏ๋ก ๋น
๋ฐ์ดํฐ ํ์์์๋ ์ฑ๋ฅ์ด ๊ฑฑ์ ๋ฉ๋๋ค. v4 ๋ฒ์ ์์ Form์๋ ์์ฒด ์์ ์ธ์คํด์ค๊ฐ ์์ผ๋ฉฐ Form.Item์ name
์์ฑ์ ํตํด ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ ์ง์ ์ํํ์ฌ ์ฝ๋๋ฅผ ๋จ์ํ ํ ์ ์์ต๋๋ค.
- const { form } = this.props;
- const onSubmit = () => {
- form.validateFields((err, values) => {
- if (!err) {
- console.log('Received values of form: ', values);
- }
- });
- };
+ const onFinish = (values) => {
+ console.log('Received values of form: ', values);
+ };
- <Form onSubmit={onSubmit}>
+ <Form onFinish={onFinish}>
- <Form.Item>
+ <Form.Item name="username">
- {getFieldDecorator('username')(
- <Input />,
- )}
+ <Input />
</Form.Item>
</Form>
๋๋ถ๋ถ์ ์๋๋ฆฌ์ค์์ ๊ฐ๋ฐ์๋ ์ค์ ๋ก ์ฑ๊ณต์ ์ธ ์์ ์ ์ถ์ ๊ฐ์น์๋ง์ฃผ์๋ฅผ ๊ธฐ์ธ์
๋๋ค. ๋ฐ๋ผ์ ์์์ ์ ํจ์ฑ์ ๊ฒ์ฌ ํ ํ์ ๋ง โโํธ๋ฆฌ๊ฑฐ๋๋ onFinish
๋ฅผ ์ ๊ณตํ๋ฉฐ validateFields
๋ ์ด์ ํ์ํ์ง ์์ต๋๋ค.
๋ํ Form์ ์์ ์์ ๋ฅผ ์ ์ด ํ ์ ์๋๋ก ํํฌ ๋ฉ์๋ Form.useForm
์ ๊ณตํฉ๋๋ค.
const [form] = Form.useForm();
React.useEffect(() => {
form.setFieldValues({ ... });
});
<Form form={form} />
๋์์ ๋ชฉ๋ก ํ๋๋ฅผ ์ฝ๊ฒ ์ ์ด ํ ์ ์๋๋ก Form.List ๊ตฌ์ฑ ์์๋ฅผ ์ ๊ณตํฉ๋๋ค.
<Form.List name="names">
{(fields, { add, remove }) => (
<div>
{fields.map(field) => <Form.Item {...field}><Input /></Form.Item>}
<Button onClick={() => add(initialValue)}>Add</Button>
</div>
}
</Form.List>
ํธํ์ฑ์ ๋ํ ์ต์ ์๊ตฌ ์ฌํญ์ ๋์์ผ๋ฏ๋ก sticky
์คํ์ผ์ ์ฌ์ฉํ์ฌ ๊ณ ์ ์ด์ ๊ตฌํํ๋๋ก ๋ณ๊ฒฝํ์ต๋๋ค. ๊ทธ๋ฌ๋ฉด ์์์ ๊ณ ์ ์ด์ด์์ ๋ ์ฑ๋ฅ ์๋น๊ฐ ํฌ๊ฒ ๊ฐ์ํฉ๋๋ค. sticky
์ง์ํ์ง ์๋ IE 11์ ๊ฒฝ์ฐ ๋ค์ด ๊ทธ๋ ์ด๋ํฉ๋๋ค.
๋์์ ์์ฝ ๋ผ์ธ์ ํจ๊ณผ๋ฅผ ์ป๊ธฐ ์ํด ์๋ก์ด summary
API๋ฅผ ์ ๊ณตํฉ๋๋ค.
๋ถ๋ฅ๊ธฐ๋ ๋ค์ค ์ด ์ ๋ ฌ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
๋ํ ๊ธฐ๋ณธ ๋ก์ง์ ์กฐ์ ํ์ฌ ์ด์ fixedColumn
, expandable
, scroll
๋ฅผ ํผํฉ ํ ์ ์์ต๋๋ค. body
API๋ ์ฌ์ฉ์ ์ ์ ํ
์ด๋ธ ์ปจํ
์ธ ๊ตฌํ์ ์ํด ์ ๊ณต๋๋ฏ๋ก ๊ฐ์ ์คํฌ๋กค๊ณผ ๊ฐ์ ํจ๊ณผ๋ฅผ ์ป์ ์ ์์ต๋๋ค.
๋ ์ง ๊ตฌ์ฑ ์์๋ฅผ ์ ์ฒด์ ์ผ๋ก ๋ค์ ์์ฑํ์ฌ moment
์์ ๋ถ๋ฆฌํ์ต๋๋ค. ์ฐ๋ฆฌ๊ฐ ์ ๊ณตํ๋ generate
๋ฉ์๋๋ฅผ ํตํด ์ฌ์ฉ์ ์ง์ ๋ ์ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ ํ๊ธฐ ๊ตฌ์ฑ ์์๋ฅผ ์์ฑ ํ ์ ์์ต๋๋ค. ํธํ์ฑ์ ์ ์งํ๊ธฐ ์ํด ๊ธฐ๋ณธ Picker ๊ตฌ์ฑ ์์๋ ์ฌ์ ํ moment
๋ฅผ ๋ ์ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ์ฌ์ฉํฉ๋๋ค. ๋ง์ถค ๋ ์ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ฌ๊ธฐ๋ฅผ ์ฐธ์กฐํ์ธ์.
๋ํ ์๊ฐ, ๋ ์ง, ์ฃผ, ์, ์ฐ๋ ์ ํ๊ธฐ ๋ฐ ํด๋น ๋ฒ์ ์ ํ๊ธฐ์ ์ ์ฒด ์ธํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. picker
์์ฑ์ ํตํด ์ค์ ํ ์ ์์ผ๋ฉฐ, ๋ ์ด์ mode
์ ์ ์ด ๋ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ํน์ ์ ํ๊ธฐ๋ฅผ ๊ตฌํํ ํ์๊ฐ ์์ต๋๋ค.
<RangePicker />
<RangePicker showTime />
<RangePicker picker="week" />
<RangePicker picker="month" />
<RangePicker picker="year" />
๋ฒ์ ์ ํ๊ธฐ์์ ์ํธ ์์ฉ๋ ์ต์ ํํ์ต๋๋ค. ์ด์ ์์ ๋๋ ์ข ๋ฃ ์๊ฐ์ ๊ฐ๋ณ์ ์ผ๋ก ์ ํํ ์ ์์ผ๋ฉฐ ๋ ์ง๋ฅผ ์๋์ผ๋ก ์ ๋ ฅํ๋ ํ๊ฒฝ์ด ์๋ฒฝํ๊ฒ ์ต์ ํ๋ฉ๋๋ค.
์ด์ ๋ฒ์ ์์๋ Modal.xxx
๋ฐ Notification.xxx
ํธ์ถ ๋ฉ์๋๊ฐ ์ปจํ
์คํธ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๋ค๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ์ด๋ ์ด๋ฌํ ๊ตฌ๋ฌธ ์คํ์ ๋ํด ReactDOM.render
๋ฅผ ํตํด ์ถ๊ฐ๋ก React ์ธ์คํด์ค๋ฅผ ์์ฑ ํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์ปจํ
์คํธ ์์ค ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค. ์ ๋ฒ์ ์์๋ ์ปจํ
์คํธ๋ฅผ ๊ฐ์ ธ์์ผํ๋ ์์น์ ๋
ธ๋๋ฅผ ์ฝ์
ํ ์ ์๋๋ก hooks ๋ฉ์๋๋ฅผ ์ ๊ณตํฉ๋๋ค.
const [api, contextHolder] = notification.useNotification();
return (
<Context1.Provider value="Ant">
{/* contextHolder is in Context1 which mean api will not get context of Context1 */}
{contextHolder}
<Context2.Provider value="Design">
{/* contextHolder is out of Context2 which mean api will not get context of Context2 */}
</Context2.Provider>
</Context1.Provider>
);
v4์์๋ ๊ฐ์ ์คํฌ๋กค ๊ธฐ์ ์ ์ฌ์ฉํ์ฌ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฑ๋ฅ์ ์ต์ ํํ์ฌ ์ต์ ๋ ๋๋ง์ ์ํด ๋ง์ ์์ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋ Tree, TreeSelect ๋ฐ Select๋ฅผ ์์ ํ์ต๋๋ค.
๋ํ ํค๋ณด๋ ์ํธ ์์ฉ ๋ฐ ์ ๊ทผ์ฑ๋ ์ต์ ํ๋์์ต๋๋ค.
direction
rtl
์ธ์ด ๊ตญ์ ํ๋ฅผ ์ง์ํ๊ธฐ ์ํด direction
๊ตฌ์ฑ์ ์ ๊ณตํฉ๋๋ค.size
์ค์ ์ ์ง์ํ์ฌ ๊ตฌ์ฑ ์์ ํฌ๊ธฐ๋ฅผ ํฌํจํฉ๋๋ค.suffix
์์ฑ์ ์ถ๊ฐํฉ๋๋ค.steps
ํ์ ๊ตฌ์ฑ ์์๋ฅผ ์ถ๊ฐํฉ๋๋ค.onResize
์ง์ํฉ๋๋ค.flex
๋ ์ด์์์ ์ฌ์ฉํฉ๋๋ค.์ฌ๊ธฐ๋ฅผ ํด๋ฆญํ์ฌ ์ ์ฒด ์ ๋ฐ์ดํธ ๋ก๊ทธ
๊ฐ๋ฅํ ํ ์ ๊ทธ๋ ์ด๋๋ฅผ ๋จ์ํํ๊ธฐ ์ํด ์ต๋ํ์ ํธํ์ฑ์ ์ ์งํ์ต๋๋ค. ๊ทธ๋ฌ๋์ฃผ์๊ฐ ํ์ํ ๋ช ๊ฐ์ง ์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ์ด ์์ต๋๋ค. ๋จผ์ ๋ง์ด๊ทธ๋ ์ด์ ์ ์ํด ์ ๊ณตํ๋ codemod ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๊ณ ๋ง์ด๊ทธ๋ ์ด์ ํ ์์๋ ์ผ๋ถ ์ฝํ ์ธ ๋ฅผ ์๋์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ ์ ์์ต๋๋ค. ์ ๊ทธ๋ ์ด๋์ ๋ํด์๋์ด ๋ฌธ์๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
๊ฐ๋ฏธ ๋์์ธ 4.0์ ํ์์. ๋๋ถ์ ๊ธฐ์ฌ ๋ฐ ์ง์ญ ์ฌํ ์์ ๋ด์ฌ์์ ์ง์ ๋ถ๊ฐ๋ถ์ ๊ด๊ณ ์ ๋ํ @saeedrahimi ์ ๊ตญ์ ํ ๊ธฐ๋ฅ์ ๋ฌ์ฑํ๊ธฐ rtl
, @shaodahong ํธํ ํจํค์ง์ ๊ธฐ์ฌ์ ์ฐธ์ฌ ๋ชจ๋ ๊ฐ๋ฐ. Ant Design์ ๋์ฑ ์ข๊ฒ ๋ง๋๋ ๊ฒ์ ์คํ ์์ค์ ๋ํ ๊ทํ์ ๊ณตํ์
๋๋ค!
๋ฌธ์๋ฅผ ์๋์ผ๋ก ๋ฐฐํฌํด์ผํ๋ฉฐ ๋ค์์ ๋ ์ด์ ๋ณผ ์ ์์ต๋๋ค.
์ด ์ ๊ทธ๋ ์ด๋๋ฅผ ๊ธฐ๋ค๋ฆด ์ ์์ต๋๋ค
ํ ๋๋ฆฌ์๋ ๊ตฌ์ฑ ์์์ ๊ทธ๋ฆผ์ด ๊ฑธ๋ ค์๋ ๊ฒ ๊ฐ์ต๋๋ค.
์ถํํฉ๋๋ค! ๋ ธ๋ ฅ ํด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.
์ถํํฉ๋๋ค!!!
Hooks๋ 16.8๋ถํฐ ์ง์๋ฉ๋๋ค. package.json์ ํ์ฌ 16.8์ ๋๋ค. ์ฌ๊ธฐ์ ์ค๋ช ๋ ์ต์ ์๊ตฌ ์ฌํญ์ React 16.9์ ๋๋ค. ์ผ๊ด์ฑ์ ์ ์งํ๋๋ก ์์ ๋์์ต๋๊น?
๋ฌธ์๋ฅผ ์๋์ผ๋ก ๋ฐฐํฌํด์ผํ๋ฉฐ ๋ค์์ ๋ ์ด์ ๋ณผ ์ ์์ต๋๋ค.
next.ant.design
ant.design
์ง๊ธ
next.ant.design
์ด ์ด์ ant.design
๋ฆฌ๋๋ ์
๋ฉ๋๋ค.
๐๐ผ
์ถํํฉ๋๋ค! ์๋ก์ด ํํ ์ฑ๋ฅ์ด ๋๋จํฉ๋๋ค
์ฌ๋ฆฌ
[๊ณผ๊ฑฐ ๋ฒ์ ์์๋ Modal.xxx ๋ฐ Notification.xxx ํธ์ถ ๋ฉ์๋๊ฐ Context๋ฅผ ๊ฐ์ ธ์ฌ ์์๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ์ด๋ ์ด๋ฌํ ๊ตฌ๋ฌธ ์คํ์ ๋ํ ReactDOM.render๋ฅผ ํตํด React ์ธ์คํด์ค๋ฅผ ์ถ๊ฐ๋ก ์์ฑ ํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ด๋ฉฐ, ์ปจํ ์คํธ ์์ค ๋ฌธ์ ๋ ๋ฐ์ํฉ๋๋ค.]
์ฌ๊ธฐ์ ReactDOM.createPortal ์ ํตํด ์ํํ๋ ๊ฒ์
@kpaxqin ์ง์ PR์ ๋ํ ์์ด๋์ด๊ฐ ์์ต๋๊น?
๊ฝค ์์ ์ ์ธ rc-3์์ ์์ฐ์ ์ฌ์ฉํ์ญ์์ค. ๊ฐ์ฌํฉ๋๋ค
์ด์จ๋ , Teme์ด ๋๋์ด ์ถ์๋์์ต๋๋ค. Huaxie๊น์ง ๊ธฐ๋ค๋ฆฌ์ธ์ :) :)
antd 4.0์ ์ฆ๊ธฐ๊ณ ์ฐ๋ฆฌ๋ฅผ ์ํด ํ๋ณตํ ์ผ์ ๋ง๋์ญ์์ค :) :)
๋คํฌ ๋ชจ๋๋ ํ๋์ ๊ฒ์ ์ ์ ๋ง ์ถ๊ฐํฉ๋๋ค.
@ ycjcl868 https://github.com/ant-design/ant-design/issues/21656#issuecomment -592293728
๋คํฌ ๋ชจ๋๋ ํ๋์ ๊ฒ์ ์ ์ ๋ง ์ถ๊ฐํฉ๋๋ค.
์ ์๋ง ๊ธฐ๋ค๋ ค์ฃผ์ธ์. dark.css
์ด (๊ฐ) ๋๋ฝ๋์์ต๋๋ค. ์ฌ์ดํธ๋ฅผ ๋ฐฐํฌํ๊ณ ์์ต๋๋ค.
@ ycjcl868 # 21656 (์ฝ๋ฉํธ)
๋๋
๋น์ ์ ์์ ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค!
๊ตญ๋ด ๋ฏธ๋ฌ ์ฌ์ดํธ https://ant-design.gitee.io/index-cn์ ์ ๋ฐ์ดํธ๋์ง ์์์ต๋๋ค.
๊ณ ๋ง์์ ๐ป
๋๋์ด ์ ๊ทธ๋ ์ด๋๋์์ต๋๋ค! ์ถํํฉ๋๋ค
๋๋์ด ์ถ์! ๋๋จํ ๊ฐ์ฌํฉ๋๋ค!
๋ ธ๋ ฅ ํด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ์ ๊ทผ์ฑ์ ๋ํด ์ด๋ค ์ผ์ด ์์ต๋๊น?
์ถํํด ์ถํํด
์ด๋ฏธ ์ฌ์ฉ ์ค์ด๋ฏ๋ก antd ๐ ๋๋ถ์ ์ง์ฅ์์ antd๊ฐ ๋ถ์กฑํ๋ฉด์ด ํ์ด์ง์์ ๋ด ๊ฒฝ๋ ฅ์ด ์์ ํ ์ด๋์ธ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
@ wlc534 ๊ฐ ์ค๋น๋์์ต๋๋ค.
๋ฉ์ง ์์ ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ์๋ก์ด ์์ ํํฌ API ์ฌ์ฉ์ ๊ธฐ๋ํฉ๋๋ค. RangePicker๋ UX ์ธก๋ฉด์์ ์ฌ์ฉํ๊ธฐ ์ด๋ ค์ ์ง๋ง ์ด์ ๊ฑฐ์ ์๋ฒฝํฉ๋๋ค. ์ ํ์ด!
์ ํ์ด !! ๋ ์ ์ dep๋ฅผ ์ค์ผ ์ ์๋ค๋ฉด ์๋ฒฝํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋ ๊ฒ์ ๋๋ค !!
๋ง์ง๋ง์ผ๋ก devtool์์ ์ด๋ฌํ ๊ฒฝ๊ณ ๋ฅผ ์ ๊ฑฐํ์ต๋๋ค. ์ข์ ๋์ ...
์ถํํฉ๋๋ค !!! ๋๋ ์ด๊ฒ์ ์ค๋ซ๋์ ๊ธฐ๋ค๋ฆฌ๊ณ ์์๋ค
์ด ๋ฒ์ญ์ ์ฝ๊ฐ ์นญ ๊ธ๋ฆฌ์์ ๋๋ค .. ์ข ์ด์ ํด์
์คํ ์์ค ํ๋ก์ ํธ๋ ์ฝ์ง ์์ผ๋ฉฐ ์ง๊ธ๊น์ง ์ ๋ฒ์ ์ ์ ์งํ๋ ๊ฒ์ด ํจ์ฌ ๋ ์ด๋ ต์ต๋๋ค. ๐
๋ด๊ฐ ์ฌ์ฉํ๋ ์ผ๋ถ ์ฅ์๋ ๋ค์ ๊ทธ๋ฆผ์์ฒ๋ผ ๋๊ปด์ง๊ณ 2px์ ๋ฅ๊ทผ ๋ชจ์๋ฆฌ๋ ์ ๋ง ์ต์ํด ์ ธ์ผํฉ๋๋ค ๐ธ.
์คํ์, ๋๋ ์๋์ผ๋ก ์ด์ ๋ฒ์ ์ ์๋ฉด์ผ๋ก ๋ณํ ํ ์์๋ ์์ ๋๊ตฌ ์ผ๋ค form
๊ฐ์ getFieldDecorator
V4์์ ์ฐ๊ธฐ์, // github์ : HTTPS๋ฅผ. com / AshoneA / antd-form- migration
๋ค์์ 4.0์ ๋ณ๊ฒฝ ๋ฐ ์ ๊ทธ๋ ์ด๋์ ๋ํด ์ปค๋ฎค๋ํฐ์์ ํธ์ง ํ ๋ฌธ์์ ๋๋ค. ์ด๋ ๋ํ ์ข์ต๋๋ค. Ant Design 4.0์ ๊ณต์ ๋ฒ์ ์ ๋ํ ์๋น ์ฐ๊ตฌ
๊ตฌ๊ธ ๋ฒ์ญ์ผ๋ก ์ฒ์ฒํ ์ฝ์ ํ, ์๋์ ์ค๊ตญ์ด ๋ฒ์ ์ด ์์์ ์์์ต๋๋ค. ๐ ๊ตฌ๊ธ ๋ฒ์ญ์ ํจ๊ณผ๋ ์ฌ์ ํ ๊ฝค ์ข์ต๋๋ค ...
๋๋ ์ง๋ 9 ์ (๊ณต์ ํ๋ก์ ํธ)์ ์ฌ์ฉํ๊ณ ๋๊น์ง ๋ฐ๋ผ ๊ฐ๋ค.๊ฐ์ฌ
@PeiTianHuang์ ๋จผ์ ์ฌ์ฉ์ ์ ์ ์คํ์ผ ๋ฒ์๊ฐ ์๋์ง ํ์ธํ๊ณ ๋ฐ๋ณต๋๋ ๋ฌธ์ ๋ฅผ ์ ๊ณตํ์ง ์์ผ๋ฉด ์ ๋ฌธ์ ๋ฅผ ์ฝ๋ ๋ค.
์ํด ์ ๋ฌผ์ ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ๋น์ ์ ํ๋ฅญํ ์ผ์ํ๋ค.
export default Form.create()(DepartmentModal);
3.0 ์
๊ทธ๋ ์ด๋, ์ ์ธ๊ณ์ ์ผ๋ก์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ
๋ง์ง๋ง์ผ๋ก ํ์์ ๋ฐ๋ผ ๊ธ๊ผด ์์ด์ฝ์ด ์ถ์๋์์ต๋๋ค. ์ด์ ๋ฒ๋ค ํ์ผ์ด ๋ ์์ ์ง ๊ฒ์ ๋๋ค.
SASS ๋ฑ๊ณผ ๊ฐ์ ํจ์ฌ ๋ ๋์ ๊ฒ์ ์ํด์ด ๊ธฐํ๋ฅผ ๋์ด์ฃผ์ง ์์ ๊ฒ์ ์ฌํ๋ค.
์ด๋ฌํ ํ๋ก UI ํ๋ ์ ์ํฌ๋ฅผ ์ฌ์ฉํ๋ฉด MUI๋ฅผ ์ฌ์ฉํ๋ฉด ๋งค์ฐ ๊ฐ๋จํ๊ฒ ๋ฐํ์์์ ํ
๋ง๋ฅผ ๊ต์ฒด ํ ์ ์์ต๋๋ค.
ํํฌ๋ฅผ ์ง์ํ๋ ค๋ฉด react> = 16.8.0์ผ๋ก ์ถฉ๋ถํ์ง ์์ต๋๊น?
์ด ๋ฌธ์ ๋ 4.0 https://github.com/ant-design/ant-design/issues/12430์ผ๋ก ์ ๊ทธ๋ ์ด๋ ํ ํ ๋ค์ ๋ฐ์ํ์ต๋๋ค.
4.0์์ ์ ๋๋ก ์ ๊ทธ๋ ์ด๋ํ๊ธฐ์๋ ๋๋ฌด ๋ง์ ๋ฒ๊ทธ๊ฐ ์์ต๋๋ค.
๊ฑด๋ฐฐ!
์ด ์ ๋ฒ์ ์ ๋ชจ๋ ๋ฒ๊ทธ๋ฅผ ์ฐพ์ ์์ ํด ๋ณด๊ฒ ์ต๋๋ค!
React์์ด Ant Design์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ? ํ๋ฒํ CSS
๋ก์ปฌ ํ
์คํธ์์ ์
๊ทธ๋ ์ด๋ ํ ๋ค์ react ๋ฐ react-dom์ 16.9๋ก ์
๊ทธ๋ ์ด๋ํ์ต๋๋ค. ๋ฌธ์ ์์ต๋๋ค. antd v4๋ฅผ ์
๊ทธ๋ ์ด๋ ํ ๋
์ผ๋ถ ๋ด๋ณด๋ด๊ธฐ const data = {constant} ์ ์ ๋ก๊ทธ๋ ๊ฐ์ ธ ์ค๊ธฐ ๋๋ require ์ค์ {data : undefined}๋ฅผ ํ์ํฉ๋๋ค.
์์ธ์ ๋ฌด์์
๋๊น?
form.item์ ์ด๋ฆ ์์ฑ์ ๋ ์ด์ abc ํ์์ ์ง์ํ์ง ์์ต๋๋ค. ?
@ yoyo837 ์ธ ์ , ๋ณด์
const validateMessages = {
required: "'${name}' ๆฏๅฟ
้ๅญๆฎต",
// ...
};
์ด $ {name}์ ์ด๋ค ๊ฐ์ ์ธ ์ ์์ต๋๊น?
๋ถ๊ดด์ ์คํจํ ์ฌ๋?
๋๋ด + ํจ์์ <Collapse/> <Collapse.Panel>
๋ ๋์๊ฒ ์ด๊ฒ์ ์ค๋ค :
TypeError: (0 , _insertCss.insertCss) is not a function
in IconReact (created by ForwardRef(AntdIcon))
in span (created by ForwardRef(AntdIcon))
in ForwardRef(AntdIcon) (created by ForwardRef(RightOutlined))
in ForwardRef(RightOutlined) (created by CollapsePanel)
in div (created by CollapsePanel)
in div (created by CollapsePanel)
in CollapsePanel (created by Context.Consumer)
in CollapsePanel (created by Collapse)
in div (created by Collapse)
in Collapse (created by Context.Consumer)
in Collapse (created by Collapse)
/@ant-design/icons/lib/utils.js:110:32
์ด ์ค๋ ๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌธ์ ๋ฅผ ์ ๊ณ ํ ๊ฒ์ ๋ํด ๋ฏธ๋ฆฌ ์ฃ์กํ์ง๋ง ๋ฌธ์ ์ ์์๋ฅผ ํตํด ๋ฌธ์ ๋ฅผ ์ ๊ธฐํ๋ ๋ฐ ํฐ ์ด๋ ค์์ด์๋ ๊ฒ ๊ฐ์ต๋๋ค.
Input.password๋ ์ ๋ฏธ์ฌ๋ฅผ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
4.0 ํ ์ด๋ธ ๊ฐ์ ์คํฌ๋กค๋ง ์ด์ด ๋ ์ด์ ์ง์๋์ง ์์ต๋๊น?๊ณต์ ์น ์ฌ์ดํธ ์์ ๋ฐ๋ฅด๋ฉด ๊ณ ์ ์ด์ด ์๋ชป๋์์ต๋๋ค.
npm ํจํค์ง๊ฐ 4.0์ผ๋ก ์ ๋ฐ์ดํธ๋๋์๊ธฐ์ ๋ํด ๋ง์ํด ์ฃผ์๊ฒ ์ต๋๊น?
@DenisMirandaJ ์ด๋ฏธ
@stolenng ํจ์๊ฐ ํํฌ๋ฅผ ์์ ํ ์ง์ํ์ง ์๊ธฐ ๋๋ฌธ์ผ ์ ์์ต๋๋ค. https://github.com/enzymejs/enzyme/issues/2011 ์ฐธ์กฐ
antd4์ ๋ชจ๋ ํ์
๊ตฌ์ฑ ์์๊ฐ IE๋ฅผ ์ง์ํ์ง ์์ต๋๊น?
IE11์์ โ ๋๊ฒฐ, โก ํ ๋ฒ ๊น๋ฐ์
https://ant.design/components/dropdown-cn/
์๋ก์ด CRA ๊ฐ๋ฏธ ๋์์ธ ํ๋ก์ ํธ๋ฅผ ๋ง๋๋ ๋ด ๋ฌธ์ ๋ ๋ด ์ฌ์ฉ์ ์ ์์ ํจ๊ป ์ ๊ฒ ์ฌ์ฉํ๋๋ก ํ๋ก์ ํธ๋ฅผ ๊ตฌ์ฑํ๋ ๊ฒ์ ๋๋ค. ๋์ SASS๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ๋ซ์ต๋๋ค.
๋ฌธ์๊ฐ ๋ ์ด์ ๋ณด์ด์ง ์๋ ์ด์ ๋ ๋ฌด์์ ๋๊น? v3 ๋ง ๊ฐ๋ฅํฉ๋๋ค.
๋ฌธ์๊ฐ ๋ ์ด์ ๋ณด์ด์ง ์๋ ์ด์ ๋ ๋ฌด์์ ๋๊น? v3 ๋ง ๊ฐ๋ฅํฉ๋๋ค.
@zombieJ
์๊ณ ํด์ฃผ์
์ ๊ฐ์ฌํฉ๋๋ค!
๋ด ๊ธฐ๋ฅ์์ ์ด๋ป๊ฒ ๋ฐ๊ฟ ์ ์์ต๋๊น?
if (! err) {
this.props.history.push ( '/');
}
ํ์ด์ ๋น๋๋ค!
๐
antd3.0์ antd4.0์ผ๋ก ์ ๊ทธ๋ ์ด๋ํ๋ฉด ๋ฉ๋ด ๋ฐ์ ์์ด์ฝ์ด ๋์ ์ผ๋ก ๊ตฌ์ฑ๋์ด์์ด ์ ๊ทธ๋ ์ด๋ ํ ์๋ ์์ด์ฝ์ด ์ ์์ ์ผ๋ก ํ์๋์ง ์๊ณ ์ฌ๋ฌ ํญ๋ชฉ์ ๋ํ ํ์ ๋ฐ๊ฐ ๋ถ๋ฆฌ๋์ด ์ ๊ทธ๋ ์ด๋ ๋ฐฉ๋ฒ์ด ์์ 3.0 ๊ธ๊ผด ๋ผ์ด๋ธ๋ฌ๋ฆฌ scriptUrl์ด ์๋์? ์ง๊ธ ์ํํ๊ฒ ์ ๊ทธ๋ ์ด๋ ํ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
antd4. * next.js๋ฅผ ์ฌ์ฉํ์ฌ ๋ค๊ตญ์ด ์ธ์ด ํ์ผ๋ก๋
./node_modules/antd/lib/locale/et_EE.d.ts 1 : 8
๋ชจ๋ ๊ตฌ๋ฌธ ๋ถ์ ์คํจ : ์๊ธฐ์น ์์ ํ ํฐ (1 : 8)
์ด ํ์ผ ์ ํ์ ์ฒ๋ฆฌํ๋ ค๋ฉด ์ ์ ํ ๋ก๋๊ฐ ํ์ํ ์ ์์ต๋๋ค.
const _default ์ ์ธ : {
| ๋ก์ผ์ผ : ๋ฌธ์์ด;
| ํ์ด์ง ๋งค๊น : ์์;
์ด ์ ํ์ ๋ง์ ์ค๋ฅ
ํ์ ์ฌ๋ฌ๋ถ, antd ๋ฒ์ ์ 4.1.3์ผ๋ก ์ ๊ทธ๋ ์ด๋ ํ ํ ์๊ฐ ์ ํ๊ธฐ๊ฐ IE11์์ ์ค๋ฅ๋ฅผ๋ณด๊ณ ํ๊ณ ์ ์์ ์ผ๋ก ํ์ ๋ ์ ์๋ค๋ ์ฌ์ค์ ์๊ณ ๊ณ์ญ๋๊น?
ํ์ ์ฌ๋ฌ๋ถ, antd ๋ฒ์ ์ 4.1.3์ผ๋ก ์ ๊ทธ๋ ์ด๋ ํ ํ ์๊ฐ ์ ํ๊ธฐ๊ฐ IE11์์ ์ค๋ฅ๋ฅผ๋ณด๊ณ ํ๊ณ ์ ์์ ์ผ๋ก ํ์ ๋ ์ ์๋ค๋ ์ฌ์ค์ ์๊ณ ๊ณ์ญ๋๊น?
์ ํํ ๋งํ๋ฉด DatePicker ๋ฐ RangePicker
IE์์ ํธํ์ด ํ์ํ ํ์ ๋ ์กฐ์ฌํ์ธ์
next.js๊ฐ ๊ณต์์ ์ผ๋ก ์ง์๋๋์๊ธฐ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ถํํฉ๋๋ค!!!