[리액트]
useEffect를 사용하여 TODO를 추가하니 TODOlistItem이 두번씩 보여지는 문제가 생김.
React.useEffect(() => {
todosState.addTodo('스쿼트');
todosState.addTodo('벤치');
todosState.addTodo('데드');
}, []);
이유는, Next.js 환경에선 useEffect가 두번 호출된다고 한다.
참고
Next.js 의 개발 환경에서는 이 stirct mode 가 활성화되어 있다.
strict mode 는 개발 환경에서 어플리케이션을 더 엄격하게 검사하여 예상치 못한 버그를 사전에 찾아내는 데에 도움을 주는 기능이다.
이를 활성화 하게 되면,
1. 컴포넌트의 불완전한 렌더링을 검사하기 위해, 한 번 더 렌더링된다.
2. Effect 클린업 함수를 작성하지 않아 발생하는 버그를 검사하기 위해, Effect 들을 한 번 더 실행한다.
//정순
setTodos((todos) => [...todos,newTodo]);
};
//역순
setTodos((todos) => [newTodo, ...todos]);
};
/* CSS 지역 변수 선언 */
div {
--color: gold; /* 변수선언 */
color: var(--color); /* 변수활용 */
}
/* CSS 전역 변수 선언 */
:root { /* root = 최상위 = html과 같음 */
--color: gold;
}
<div>
안녕하세요
</div>
div {
background-color: var(--mui-primary-main);
color: var(--mui-primary-contrastText);
font-size: 4rem;
font-weight: bold;
}
style.setProperty -> style속성을 정의하다
const palette = {
primary: {
main: "#2196f3",
light: "rgb(77, 171, 245)",
dark: "rgb(23, 105, 170)",
contrastText: "#fff"
}
};
const r = document.querySelector(":root");
console.log(r);
r.style.setProperty("--mui-primary-main", palette.primary.main);
r.style.setProperty("--mui-primary-contrastText", palette.primary.contrastText);
사용예시
w-3;
w-[10px];
<li class="border border-red-500 bg-red-300 group-hover:text-blue-600">
<a href="#" class="text-[3rem]">아이템3</a></li>
<div className="tw-p-10 tw-rounded-[20px] tw-shadow tw-whitespace-pre-wrap tw-leading-relaxed tw-break-words tw-text-[--mui-color-warning-main]">
component 사용
//props는 오브젝트이기 때문에 {} 중괄호를 열고 text라고 적어줌
function Btn({text}) {
return
<button
style={{
backgroundColor: "tomato",
color:"white",
padding:"10px 20px",
border:0,
borderRadious:10,
}}>
//{text}로 변경
{text}
</button>;
}
function App() {
return (
<div>
<Btn text="Save Changes"/>
<Btn text="Contunue"/>
</div>
)
}
Ref를 사용해야 할 때
const numbers = [1, 3, 5];
const listItems = numbers.map((number, idx) => {
console.log(number);
});