리액트에서 데이터가 변할 때 화면을 다시 랜더링 해주기 위해서는 React State를 사용해야 한다
React State란 컴포넌트의 랜더링 결과물에 영향을 주는 데이터를 갖고 있는 객체
State가 변경되면 컴포넌트는 리랜더링 됨. 또한 State는 컴포넌트 안에서 관리됨
constructor(props){
super(props);
// 이름이 expenses인 state 생성
this.state = {
expenses: [
{ id: 1, charge: '콜라', amount: 2000 },
{ id: 2, charge: '빵', amount: 1000 },
{ id: 3, charge: '맥북', amount: 20000 },
]
}
}
// initialExpenses={this.initialExpenses} 대신 state 사용
initialExpenses={this.state.expenses}
// setState를 이용해 state 업데이트
this.setState({ expenses: newExpense });
constructor 안에 super키워드를 써줘야 밑에 this 키워드를 사용할 수 있음
constructor(생성자)를 사용하면 인스턴스화된 객체에서 다른 메서드를 호출하기 전에 수행해야하는 사용자 지정 초기화를 제공
클래스를 new 키워드를 사용해 인스턴스 객체로 생성하면 넘겨받은 인수와 함께 constructor가 먼저 실행됨
예시)
class User {
constructor(name){
this.name = name;
}
}
let user = new User("John");
// 이때 넘겨받은 인수인 John이 this.name에 할당 됨
super 키워드는 자식 클래스 내에서 부모 클래스의 생성자를 호출하거나 메소드를 호출할 때 사용됨
예시)
class Car {
constructor(brand) {
this.carname = brand;
}
present() {
return 'I have a ' + this.carname;
}
}
class Model extends Car {
constructor(brand, mod) {
super(brand);
this.model = mod;
}
show() {
return super.present() + ', it is a ' + this.model;
}
}
let myCar = new Model("Ford", "Mustang");
mycar.show();
생성자에서는 super 키워드 하나만 사용하거나 this 키워드가 사용되기 이전에 호출되어야 함
부모 클래스의 생성자를 호출하기 전에 this를 사용해서 부모에 있는 객체에 접근하려고 하면 오류가 발생하기 때문
React에서도 마찬가지로 super가 this보다 먼저 사용되어야 함
React.component 객체가 생성될 때 props 속성을 초기화하기 위해 부모 컴포넌트에게 props를 전달
그래야 생성자 내부에서도 this.props를 정상적으로 사용할 수 있음