useState and Copy
useState?๐
์ฌ์ฉ๋ฐฉ๋ฒ๐
ex) ์๋ชป๋ ์ฌ์ฉ๋ฒ
let [like, setlike] = useState("๐ค");
{
<div
onClick={() => {
like = "ํํธ";
}}
>
{like}
</div>;
}
์ด๊ฒ์ ์๋ชป๋ ์์์ด๋ค. ์ค์ ๋ก ๐ค๋ฅผ ํด๋ฆญํ๋ค๊ณ ํด๋ like๋ณ์๋ โํํธโ๋ก ๋ณํ์ง์๋๋ค. ์ค์ง setlikeํจ์๋ฅผ ํตํด ๋ณ๊ฒฝ๋ ์ ์๋ค.
ex) ์ฌ๋ฐ๋ฅธ ์ฌ์ฉ๋ฒ
let [like, setlike] = useState("๐ค");
{
<div
onClick={() => {
setlike("ํํธ");
}}
>
{like}
</div>;
}
์ฌ๋ฐ๋ฅธ ์์. ๐ค๋ฅผ ๋๋ฅด๋ฉด โํํธโ ๋ผ๋ ํ ์คํธ๋ก ๋ณ๊ฒฝ๋๋ค.
์ฐธ์กฐํ์ ์ผ๋๐
ex) ์ฐธ์กฐํ์ (๋ฐฐ์ด)์ ์๋ชป๋ ์ฌ์ฉ๋ฒ
let [like, setlike] = useState(["์๋
", " ๋ญํด"]);
{
<div
onClick={() => {
setlike((like[2] = "์๊ฐ"));
}}
>
{like}
</div>;
}
๋ฒํผ์ ๋๋ฅด๋ฉด ๋ฐฐ์ด์ 2๋ฒ ์ธ๋ฑ์ค์ ๊ฐ์ ๋ฃ์ด์ค ๋ผ๊ณ ๋ช ๋ นํ๊ฒ๊ฐ์๋ฐ ๋ฒํผ์ ๋๋ฅด๋ฉด โ์๊ฐโ๋ผ๊ณ ๋ฐ๋๋ค. ์ด๊ธฐ๊ฐ๋ค์ด ์์ด์ง๊ฒ์ด๋ค.
ex) ์ฌ๋ฐ๋ฅธ ์ฌ์ฉ๋ฒ
let [like, setlike] = useState(["์๋
", " ๋ญํด"]);
{
<div
onClick={() => {
let copy = [...like];
copy.push(" ์๊ฐ");
setlike(copy);
}}
>
{like}
</div>;
}
์ ๊ฐ์ฐ์ฐ์๋ฅผ ํตํด ๋ฐฐ์ด์ deepCopyํด์ฃผ์๊ณ copy์ ๊ฐ์ ๋ฃ์ด ๊ทธ๊ฒ์ setํด์ฃผ์๋ค. // ์๋ ๋ญํด ์๊ฐ
ex) ์ฐธ์กฐํ์ (๋ฐฐ์ด์ ์์์ ์ฐธ์กฐํ์ ์ด ์์๊ฒฝ์ฐ)์ ์๋ชป๋ ์ฌ์ฉ๋ฒ
let [like, setlike] = useState([{"์๋
",1}, {" ๋ญํด",2}]);
{
<div
onClick={() => {
let copy = [...like];
copy,push({"goodbye"});
setlike(copy);
}}
>
</div>;
}
๋ฐฐ์ด์ ์์๋ก ์ฐธ์กฐํ์ ์ด ์์๊ฒฝ์ฐ ์ ๊ฐ์ฐ์ฐ์๋ก copyํ๋ ๋ฐฉ๋ฒ์ ์ฌ์ง์๋ค. ๋ฐฐ์ด์ ๋ฐ๊นฅ๋ถ๋ถ๋ง copy๋์ด ์์๋ณต์ฌ๊ฐ ๋๋ค.
ex) ์ฌ๋ฐ๋ฅธ ์ฌ์ฉ๋ฒ
let [like, setlike] = useState([{"์๋
",1}, {" ๋ญํด",2}]);
{
<div
onClick={() => {
let deepcopy = JSON.parse(JSON.stringify(like));
deepcopy.push(" ์๊ฐ");
setlike(copy);
}}
>
</div>;
}
๋ฐฐ์ด์ string์ผ๋ก ๋ฐ๊พธ๊ณ ๊ทธ๊ฐ์ ๋ค์ Object๋ก ๋ฐ๊พธ๋ ๊ณผ์ ์์ ๋ชจ๋ ๊ฐ๋ค์ด ๊ธฐ์กด ๋ ํผ๋ฐ์ค์ ๋๊ฒจ ์๋ก์ด ๋ ํผ๋ฐ์ค๋ฅผ ์์ฑํ๊ธฐ์ ์๋ฒฝํ deepcopy๋ผ ๋ณผ ์ ์๋ค.
๊น์ ๋ณต์ฌ 1 : JSON.parse(JSON.stringify()) ์ฌ์ฉ // ๋จ์ - ํจ์๊ฐ๋ค์ด๊ฐ Object๋ ์ฌ์ฉx
๊น์ ๋ณต์ฌ 2 : lodash(_) ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ
const original = { a: { b: 2 } };
let copy = _.cloneDeep(original);
copy.a.b = 100;
console.log(original.a.b); //2
๊น์ ๋ณต์ฌ 3 : ์ปค์คํ ์ฌ๊ทํจ์
function cloneObject(obj) {
var clone = {};
for (var key in obj) {
if (typeof obj[key] == "object" && obj[key] != null) {
clone[key] = cloneObject(obj[key]);
} else {
clone[key] = obj[key];
}
}
return clone;
}
๋จธ๋ฆฌ์ํ์ง์๊ฒ lodash๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ์ฉํ์.