class ListAppender extends Component{
constructor(props){
super(props);
this.state={
value : ""
}
}
ChangeValue = value => {
this.setState({
value
})
}
render(){
return(
<Box display="flex" justifyContent="center">
<Box m={1} pt={3}><TextField label="할 일" variant="filled" value={this.state.value} onChange={(e)=> this.ChangeValue(e.target.value)}/></Box>
<Box m={2} pt={3}><Button variant="contained" color="primary" onClick={function(e){
e.preventDefault();
this.props.onAddList(this.state.value);
var value = '';
this.setState({
value
});
}.bind(this)}>추가</Button></Box>
</Box>
)
}
}
function ListAppender() {
const [value, setValue] = useState("");
return(
<Box display="flex" justifyContent="center">
<Box m={1} pt={3}><TextField label="할 일" variant="filled" value={this.state.value} onChange={(e)=> setValue(e.target.value)}/></Box>
<Box m={2} pt={3}><Button variant="contained" color="primary" onClick={function(e){
e.preventDefault();
this.props.onAddList(this.state.value);
var value = '';
this.setState({
value
});
}.bind(this)}>추가</Button></Box>
</Box>
)
}
함수 컴포넌트 내에서 side effects를 수행할 수 있게 해줌
side effects란 컴포넌트 안에서 데이터를 가져오거나 구독하고, DOM을 직접 조작하는 작업 또한 동작, 다른 컴포넌트에 영향을 줄 수 있고 렌더링 과정에서는 구현할 수 없는 작업
작동 조건
즉, 렌더링 혹은 변수의 값 혹은 오브젝트가 달라지게 되면, 그것을 인지하고 업데이트 해주는 함수
useEffect를 사용하는 3가지 방법
useEffect(()=>{}); // 작동 조건이 발생될 때 마다 실행
useEffect(()=>{},[]); // 첫 렌더링에만 실행을 원할 때
useEffect(()=>{},{특정 변수}); // 첫 렌더링 후 특정 변수(state)가 변경될 때 마다 실행
return 활용시 언마운트시 함수 실행 가능