.btn {
background-color: tomato;
color: white;
border: none;
border-radius: 30px;
}
import PropTypes from "prop-types";
import styles from "./Button.module.css";
function Button({ text }) {
return <button className={styles.btn}>{text}</button>;
}
Button.proTypes = {
text: PropTypes.string.isRequired,
};
export default Button;
import { useState, useEffect } from "react";
function App() {
const [counter, setValue] = useState(0);
const [keyword, setKeyword] = useState("");
const onClick = () => {
setValue((prev) => prev + 1);
};
const onChange = (event) => {
setKeyword(event.target.value);
};
console.log("i run all the time");
useEffect(() => {
console.log("i run only once");
}, []);
useEffect(() => {
console.log("I run when 'keyword' changes.");
}, [keyword]);
useEffect(() => {
console.log("I run when 'counter' changes.");
}, [counter]);
useEffect(() => {
console.log("I run when keyword and count change!");
}, [keyword, counter]);
return (
<div>
<input
value={keyword}
onChange={onChange}
type="text"
placeholder="Search here..."
/>
<h1>{counter}</h1>
<button onClick={onClick}>Click me</button>
</div>
);
}
export default App;
console.log("i run all the time");
는 state가 바뀔때마다 렌더링 되지만,useEffect(() => {
console.log("i run only once");
}, []);
의 경우에는 바뀌어야 할 인자가 정해지지 않아서 페이지가 처음 렌더링 될때 실행되고 다시 실행되지 않는다. => 이런건 사용자 이름 같은거 띄울 때 좋을 듯? useEffect(() => {
console.log("I run when 'keyword' changes.");
}, [keyword]);
와 같은 경우에는, 이전과 동일하지만 마지막 keyword라는 것에 변화가 있을 경우에만 함수가 실행되도록 한 것이다.useEffect(() => {
console.log("I run when 'counter' changes.");
}, [counter]);
는 카운트가 변할때만 실행되도록 하는 것이다. useEffect(() => {
console.log("I run when keyword and count change!");
}, [keyword, counter]);
와 같이 배열에 두개의 인자를 넣어주면 된다.나도 팀에 도움이 될 수 있다. 한부분 맡아서 완성해보자.