โ๏ธ ์ด์ ๋ฐ์
React ํ๋ก์ ํธ๋ฅผ ์์ ์ค์ ๋ฐ์ดํฐ ๋ฆฌ์คํธ๋ฅผ state๋ก ๊ด๋ฆฌํด์ ํํฐ๋ง ์ต์ ์ ์ ํํ ๋๋ง๋ค ๋ฐ์ดํฐ ๋ฆฌ์คํธ๋ฅผ ๋์ ํํฐ๋ง ๊ตฌ์กฐ๋ก ์์ ์ค์ ์ผ๋ฐ ํ ์คํธ ๋ฐ์ดํฐ๋ค์ ๋์ ํํฐ๋ง ๊ธฐ๋ฅ์ด ์ ์ ์ฉ๋๋๋ฐ, Select์ defaultValue๋ ์ด์ ๋ฐ์ดํฐ ๊ฐ์ ๊ฐ๊ณ ๋์ ํํฐ๋ง์ด ์ ์ฉ๋์ง ์๋ ์ด์๊ฐ ๋ฐ์ํ์๋ค.
์์ ์ฝ๋
import React, {useState, useEffect} from 'react';
// UI Library๋ Antdesign์ ์ฌ์ฉ.
import { Select } from 'antd';
const { Option } = Select;
const data = [
{name: "Lee", isStudent: false},
{name: "Kim", isStudent: true},
{name: "Park", isStudent: true},
{name: "Oh", isStudent: false}
];
const MainPage = () => {
const [listData, setListData] = useState([]); // data state
useEffect({
setListData(data); // ์ต์ด 1ํ data๋ฅผ listData state์ ๋ฃ์ด์ค๋ค.
} ,[])
const columns = [ // table์์ ์ฌ์ฉํ columns
{
title: "์ด๋ฆ",
dataIndex: "name",
align: "center",
width: "80%",
key: "name",
},
{
title: "๋์ด",
dataIndex: "age",
align: "center",
width: "20%",
key: "age",
render: (value) => (
<Select
defaultValue={value}
onChange={onChange}
>
<Option value={true}>ํ์</Option>
<Option value={false}>์ผ๋ฐ์ธ</Option>
</Select>
);
},
];
function onChangeOption(value){ // Radio ์ต์
์ ๋ณ๊ฒฝํ ๋๋ง๋ค ๋ฐ์ํ ํํฐ๋ง ์ด๋ฒคํธ.
switch (value) {
case "all":
return setListData(data);
break;
case "student":
const filterStudents = data.filter((item) => {
return item.isStudent === true;
});
return setListData(filterStudents);
break;
case "ordinary":
const ordinaryPerson = data.filter((item) => {
return item.isStudent === false;
});
return setListData(ordinaryPerson);
break;
};
};
return (
<div>
<Radio.Group
defaultValue="all"
onChange={(value) => {
onChangeOption(value.target.value);
}}
>
<Radio value="all">์ ์ฒด</Radio>
<Radio value="student">ํ์</Radio>
<Radio value="ordinary">์ผ๋ฐ์ธ</Radio>
</Radio.Group>
<Table
dataSource={listData}
columns={columns}
/>
</div>
)
};
export default MainPage;
๋๋ต ์์ ๊ฐ์ ๊ตฌ์กฐ๋ก ๋ผ๋์ค ๋ฒํผ์ผ๋ก ์ต์ ์ ์ ํํ๋ฉด, ์๋ณธ ๋ฐ์ดํฐ ๋ฆฌ์คํธ๋ฅผ ํํฐ๋งํ์ฌ ๋ฆฌ์คํธ ๋ฐ์ดํฐ state์ ํํฐ๋ง๋ ๊ฒฐ๊ณผ๋ฌผ์ ๋ฃ์ด์ฃผ๊ณ , Table์์๋ ํํฐ๋ง๋ ๋ฐ์ดํฐ ๋ฆฌ์คํธ state๋ฅผ ๋ณด์ฌ์ฃผ๋ ๊ตฌ์กฐ๋ก ๋ง๋ค์ด์ ธ ์์๋ค.
๊ทธ๋ฐ๋ฐ ํ ์ด๋ธ์ "์ด๋ฆ"(๋จ์ ํ ์คํธ ํํ)์ ๊ฒฝ์ฐ, ๋ฐ์ดํฐ ๋ฆฌ์คํธ๊ฐ ๋์ ์ผ๋ก ํํฐ๋ง๋๋ฉฐ ์ ๊ตฌํ๋์์ง๋ง, "๋์ด"(select์ default value๋ก ๊ธฐ๋ณธ๊ฐ์ด ๋ ธ์ถ๋จ)์ ๊ฒฝ์ฐ๋ defaultValue๊ฐ ์ด์ ๋ฐ์ดํฐ ๋ฆฌ์คํธ state์ ๊ฐ์ ๋ณด์ฌ์ฃผ๊ณ ์์๋ค.
์ด์ ๋ ๋ชจ๋ฅด๊ฒ ์ง๋ง, default value๋ฅผ state๋ก ๋ฐ๊ฒ ํด๋, ์ฝ์์๋ ๋ถ๋ช ํ ์๋ก์ด state๋ฐ์ดํฐ๊ฐ ์ฐํ๋๋ฐ ui์์๋ ์ฌ์ ํ ์ด์ ๋ฐ์ดํฐ๊ฐ ๋์ค๊ณ ์์๋ค. state์ ๋ณํ๋ฅผ ๊ฐ์งํ์ฌ useEffect๋ก ๋ฃ์ด์ฃผ์ด๋ ๋ง์ฐฌ๊ฐ์ง..
๊ทธ๋์ ๊ฒฐ๊ตญ ํด๊ฒฐ ๋ฐฉ๋ฒ์ Select์ default value๊ฐ ์๋ value๋ฅผ ์ฌ์ฉํ์ฌ, ์ด๊ธฐ ๋ฐ์ดํฐ์์ ๋ฐ์์ค๊ณ Select์ onChange ์ด๋ฒคํธ๋ฅผ ํตํด value ๊ฐ์ ๋์ ์ผ๋ก ๋ฐ๊ฟ์ฃผ๋ ์ด๋ฒคํธ๋ฅผ ์ถ๊ฐํ์๋ค.
ํด๊ฒฐ ์์ ์ฝ๋
import React, {useState, useEffect} from 'react';
// UI Library๋ Antdesign์ ์ฌ์ฉ.
import { Select } from 'antd';
const { Option } = Select;
const data = [
{name: "Lee", isStudent: false},
{name: "Kim", isStudent: true},
{name: "Park", isStudent: true},
{name: "Oh", isStudent: false}
];
const MainPage = () => {
const [listData, setListData] = useState([]); // data state
const [ selectValue, setSelectValue] = useState('');
useEffect({
setListData(data); // ์ต์ด 1ํ data๋ฅผ listData state์ ๋ฃ์ด์ค๋ค.
} ,[])
const columns = [ // table์์ ์ฌ์ฉํ columns
{
title: "์ด๋ฆ",
dataIndex: "name",
align: "center",
width: "80%",
key: "name",
},
{
title: "๋์ด",
dataIndex: "age",
align: "center",
width: "20%",
key: "age",
render: (item) => {
if(value === ''){
setSelectValue(item);
}
return <Select
value={selectValue}
onChange={(v) => {
setSelectValue(v.tartget.value);
}}
>
<Option value={true}>ํ์</Option>
<Option value={false}>์ผ๋ฐ์ธ</Option>
</Select>
};
},
];
function onChangeOption(value){ // Radio ์ต์
์ ๋ณ๊ฒฝํ ๋๋ง๋ค ๋ฐ์ํ ํํฐ๋ง ์ด๋ฒคํธ.
switch (value) {
case "all":
return setListData(data);
break;
case "student":
const filterStudents = data.filter((item) => {
return item.isStudent === true;
});
return setListData(filterStudents);
break;
case "ordinary":
const ordinaryPerson = data.filter((item) => {
return item.isStudent === false;
});
return setListData(ordinaryPerson);
break;
};
};
return (
<div>
<Radio.Group
defaultValue="all"
onChange={(value) => {
onChangeOption(value.target.value);
}}
>
<Radio value="all">์ ์ฒด</Radio>
<Radio value="student">ํ์</Radio>
<Radio value="ordinary">์ผ๋ฐ์ธ</Radio>
</Radio.Group>
<Table
dataSource={listData}
columns={columns}
/>
</div>
)
};
export default MainPage;
์ด๋ฐ ์์ผ๋ก select์ default value๊ฐ ์๋ value๋ก ๊ธฐ๋ณธ๊ฐ์ ์ค์ ํด์ฃผ๋ฉด option์ผ๋ก value๊ฐ์ ๋ฐ๊ฟ์ฃผ์ด๋ state์ select value๊ฐ ๋ณํ์ง ์์๊ธฐ ๋๋ฌธ์ ๋ณ๊ฒฝ๋์ง ์๋๋ค. ๊ทธ๋์ selectValue state๋ฅผ ๋ง๋ค์ด์ฃผ์ด, selectValue state ๊ฐ์ด ์ด๊ธฐ๊ฐ ์ผ ๋๋ง default value๋ก ๋ฐ์ดํฐ์์ ๋ฐ์์จ ๊ฐ์ ๋ฃ์ด์ฃผ๋ if๋ฌธ์ ์ถ๊ฐํด์ฃผ๊ณ , option์ ๋ณ๊ฒฝํ ๋๋ง๋ค setSelectValue ์ด๋ฒคํธ๋ฅผ ํตํด ๋ณ๊ฒฝ๋ selectValue๊ฐ์ ๋ฃ์ด์ฃผ์๋ค.
์ select์ default value๊ฐ ๋์ ์ผ๋ก ๋์ํ์ง ์๋์ง ๋ ์ฐพ์๋ณด๊ณ ์ ๋ฆฌํ์ฌ ์ถ๊ฐํด์ผ๊ฒ ๋ค.