191110 TIL useState 구현(미션1), 테이블 라이브러리 정리
Nov 10, 2019
»
1.5막,
TIL (Today I Learned)
useState 구현(미션1)
const React = (()=>{
let _val
return {
render(Component) {
const comp = Component();
comp.render();
return comp;
},
useState(initVal) {
const state = _val || initVal
const setState = newVal => {
_val = newVal
}
return [state, setState]
}
}
}
)();
function MyComponent() {
const [foo,setFoo] = React.useState(10);
return {
render() {
setFoo(foo + 1);
console.log(`foo value is ${foo}`);
}
}
}
React.render(MyComponent);
React.render(MyComponent);
React.render(MyComponent);
//실행결과
// foo value is 10
// foo value is 11
// foo value is 12
- 과제 (미션1)
//Plain 구현
const Plain = (() => {
//구현이 필요해....
let _val;
let effectFn;
let render;
let thisComp;
return {
useState(initVal) {
let state = _val || initVal;
const setState = newVal => {
_val = newVal();
this.renderComponent(thisComp);
};
return [state, setState];
},
renderComponent(Component) {
thisComp = Component;
const comp = Component();
render = comp.render;
render();
effectFn();
return comp;
},
useEffect(fn) {
effectFn = fn;
}
};
})();
function plain_test() {
const [foo, setFoo] = Plain.useState(``);
const fireEvent = () => {
setFoo(value => new Date().toLocaleTimeString() || value);
};
Plain.useEffect(() => {
console.log(`[effect]`);
console.log(`-----------------------`);
});
return {
render() {
console.log(`[render] : ${foo}`);
},
fakeEvent() {
fireEvent();
},
initComponent() {
//초기화코드가 있다면 넣을수도 있음
this.render();
this.useEffect();
}
};
}
let pd = Plain.renderComponent(plain_test);
(async function loop() {
for (let i = 0; i < 5; i++) {
await new Promise(resolve =>
setTimeout(() => {
pd.fakeEvent();
resolve();
}, 1000)
);
}
})();
뭔가 이게 맞나,,, 싶은 느낌으로 이것저것 계속 해서 구현했다.
놀라웠던 포인트는 plain_test
함수를 계속 실행시켜줘야 foo 값이 바뀐다는 것,,,
디버깅을 겁나 하고나서야 깨달았다…. 휴…
테이블 라이브러리
계속 테이블을 잘 그려줄 수 있는 라이브러리를 찾고 있다.
1번 옵션: react-admin
- 장점: 어드민 전체 프레임 워크 제공 / responsive / 탄탄한 문서
- 단점: 만들어진 컴포넌트에 꼭 맞는 api 형식을 맞춰주어야함
2번 옵션: axui-datagrid
- 장점: 한국인이 제작 / 많은 데이터 효과적으로 뿌려줌
- 단점: 문서 빈약 / 페이지네이션 기능 없음
3번 옵션: ag-grid
- 장점: 겁나 빵빵만 문서 / 유료화로 출시까지 됨(검증된 라이브러리) / 효과적인 데이터 렌더링
- 단점: 아직까진 없는듯…
그래서 ag-grid로 결정!
좋은 라이브러리를 찾다가 [React] 리액트로 백오피스 개발하며 경험한 추천 npm 라이브러리 글을 보았고, ag-grid 알게 되었다.
부디 ag-grid에 정착할 수 있기를…