728x90
반응형
const React = (() => {
let state;
const useState = (init) => {
state = state ?? init
let setState = (newValue) => {
state = newValue
return state
}
return [state, setState]
}
return {useState}
})()
const [state, setState] = React.useState("hi");
setState("no")
state
setState("2222")
state
리액트 useState
대강 이렇게 생기지 않았을까
아쉬운 건
state.name = "eunji"
하는 순간 값은 들어가지 않지만 오류 자체를 안 띄워줌
이걸 해결하려면
1. 프록시 객체 사용하기
const React = (() => {
let state;
const useState = (init) => {
state = new Proxy({ ...init }, {
set(target, prop, value) {
throw new Error(`'${prop}' 속성을 직접 변경할 수 없습니다. setState를 사용하세요.`);
},
});
const setState = (newValue) => {
state = new Proxy({ ...state, ...newValue }, {
set(target, prop, value) {
throw new Error(`'${prop}' 속성을 직접 변경할 수 없습니다. setState를 사용하세요.`);
},
});
render();
};
return [state, setState];
};
const render = () => {
console.log("렌더링!", state);
};
return { useState };
})();
const [state, setState] = React.useState({ id: 1 });
state.id = 123;
setState({ name: "React" });
- 간단한 불변 상태: Object.freeze
- 정교한 감시와 제한: Proxy
- 속성 단위로 제어: Object.defineProperty
요렇게 등등 있다고 하는데
Object.defineProperty. object.freeze는 안되는 것 같음
728x90
반응형
'TIL' 카테고리의 다른 글
react SEO 관련 (0) | 2025.04.07 |
---|---|
icon svg 컴포넌트 스타일 props 넘기기 (0) | 2024.10.04 |
react - Suspense 이해 정리 (0) | 2024.08.19 |
타입스크립트 - infer (0) | 2024.08.18 |
타입스크립트 - enum (0) | 2024.08.18 |
댓글