📌 참고 📌
https://www.youtube.com/watch?v=e2c1EUcW7oo&list=PLuHgQVnccGMCRv6f8H9K5Xwsdyg4sFSdi&index=17
사용자의 관점으로 속성을 의미한다.
html
태그에서 attribute
로 불리며, react
에서는 props
로 불린다.
사용자가 컴포넌트의 기본적인 동작을 바꾸고 싶을 때 사용한다.
사용자 정의 태그의 값을 가변적으로 변경할 수 있다.
props
의 값을 직접 바꾸는 것은 금지되어 있다.props
값을 바꾸는 것은 가능하다.// props : title, desc
<Subject title="HTML" desc="HTML info"></Subject>
<Subject title="CSS" desc="CSS info"></Subject>
props
값은 읽는 것(read-only
)만 가능하기 때문에
값을 변경하려면 state
속성으로 값을 변경해야 한다.
구현자의 관점이다.
props
의 값에 따라서
컴포넌트 내부적으로 사용하는 구현에 필요한 데이터가 달라진다.
class App extends Component {
// 컴포넌트가 실행될 때 render 함수 보다 먼저 실행되서 초기화를 수행
constructor(props){
super(props);
// 하드코딩 하지 않고 데이터를 객체안에 생성
this.state = {
contents:[
{id:1, title:'HTML', desc:'HTML info'},
{id:2, title:'CSS', desc:'CSS info'},
{id:3, title:'JavaScript', desc:'JavaScript info'}
]
}
}
render() {
return (
<div className="App">
// state 의 값을 사용하는 방법
<TOC data={this.state.contents}></TOC>
</div>
);
}
}
state
값을 동적으로 변경하면 react
가 변경된 값을 인식하지 못한다.
this.state.mode = 'init';
이미 컴포넌트가 생성된 다음 state
값을 변경하려면
이벤트 핸들링을 통해 상위 컴포넌트의 state
값을 호출하여 값을 변경한다.
this.setState
함수 안에 변경하고 싶은 값을 객체 형태로 넣는다.
onClick={function(e){
console.log(e);
e.preventDefault();
// setState : state 의 값을 변경하는 방법
this.setState({
mode:'init'
});
}.bind(this)}
외부의 props
와 props
에 따라서 실제로 구현하는
내부의 state
의 정보가 철저하게 분리되어
양쪽의 편의성을 도모하는 것이 리액트의 핵심이다.
state
값을 사용하고,props
을 통해 전달한다.state
값을 갖고 있는 컴포넌트의 render()
함수가 다시 호출되고,
각 하위 컴포넌트 안에 있는 render()
함수도 다시 호출되면서
페이지가 전환되는 현상이 발생한다.
여러개의 요소를 자동으로 생성하는 경우 사용한다.
각각의 태그들을 react
가 구분할 수 있도록 식별자key
속성값을 가지고 있어야 한다.
react
의 필요로 인해 내부적으로 넣어주는 값이다.
// key : key={data[i].id}
<li key={data[i].id}>
<a href={"/content/"+data[i].id}>
{data[i].title}
</a>
</li>