const [open, setOpen] = useState(false);
React hook구조는 useState를 제공한다.
this.state = { open : flase }; //위의 open 변수
this.setState = { { open : true } }; //위의 setOpen 변수
위 처럼 선언을 하게되면 Class구조에서 open이라는 변수의 state를 선언하고 setState함수를 좀 더 편리하게 사용할 수 있게 해준다.
그래서 hook을 이용하면 toggle함수를 선언하기가 편했다. 나는 아래처럼 사용해서 toogle을 구현했다.
function useToggle() {
const [open, setOpen] = useState(false);
const toggleOpen = useCallback(() => {setOpenDetail(open => !open)});
return [toggleOpen];
}
이렇게 하면 state가 추가 될때마다 위 function에 각 state와 toggle 부분을 추가해서 재사용할 수 있었다.
그런데 class구조를 사용하려고 하니까 위 방법으로 할 수가 없었다. 흠 .. 고민고민하다가 예전에 꺽쇠를 이용하면 string을 번수처럼 사용할 수 있다는 사실이 떠올렸다.
const stateName = "open";
console.log([stateName]);
이렇게 선언하면 아래 출력할때 react는 "open"이라는 string으로 인식한다.
요 방법을 사용하면 재사용 가능한 function을 만들 수 있을 것 같은 느낌 ..!
toggle(stateTitle){
this.setState({
[stateTitle] : !this.state[stateTitle]
});
}
[stateTitle]이 string으로 들어온 state이름을 react가 변수로 인식할 수 있게 해준다.
그리고 string을 이용해서 state를 가져오고 싶으면 this.state[stateTitle] 형태로 사용하면 된다.
<Button onClick={() => this.toggle("open")}> 열기 / 닫기 </Button>
이처럼 하면 toggle("변경을 원하는 state이름")을 이용해서 toggle함수를 사용할 수 있다.
이로써 재사용성이 높은 toggle 함수를 만들어냈다. 휴. 일일히 만들던 과거의 나 안녕!! 🖐
[React] 라이브러리 사용 없이 Ag-grid 헤더 고정하기 (0) | 2023.06.21 |
---|---|
[React / Test] 현명하게 테스트 해보기 / Gulp, Mocha, Jest, Chai (0) | 2023.02.02 |
[React/Front] CSS Scoping in React / CSS 적용범위 (0) | 2022.07.23 |
[Javascript/React] JSON으로 만든 XML을 그려보자(드디어) feat. D3 (0) | 2022.06.30 |
[Javascript] 내용에 따라 높이가 조절되는 textarea (2) | 2022.04.22 |