function App {
return (
<div className="App">
<Person name={박시우} age={145} />
<Person name={박지웅} age={27} />
<Person name={박상웅} age={238} />
</div>
);
}
//함수형 컴포넌트의 경우, 매개변수로 props를 전달해줘야 접근가능
function Person(props) {
//매개변수 props를 구조분해할당으로 {name, age}로 가져오면
//{name}, {age}로 사용 가능.
return(
<div>
<h1>이름은: {props.name} 나이는: {props.age}</h1>
</div>
);
}
//클래스형 컴포넌트의 경우.
class Person extends React.Component {
//java에서 처럼 생성자는 자동생성해주는 듯
//props에 접근하기 위해 this 가 필요.
render() {
//es6 문법사용시
// const {name,age} = this.props;
// 구조분해할당으로 {}에 name, age를 사용할수 있어요.
return (
<h1>
이름은: {this.props.name} 나이는: {this.props.age}
</h1>
);
}
}
//클래스 컴포넌트에서 constructor 생성자 사용시
class Person extends React.Component {
constructor(props) {
super(props);
this.state = { name: props.name, age: props.age };
}
render() {
return (
<h1>
이름은: {this.state.name} 나이는: {this.state.age}
</h1>
);
}
}
//구 문법으로 state를 사용하여 접근하는 경우
export default class test extends Component {
constructor(props) {
super(props);
this.state = {
person: [
{ name: "박시우", age: 145 },
{ name: "박지웅", age: 27 },
{ name: "박상웅", age: 245 },
],
};
}
render() {
const { person } = this.state;
return (
<div className="App">
<Person name={person[0].name} age={person[0].age} />
<Person name={person[1].name} age={person[1].age} />
<Person name={person[2].name} age={person[2].age} />
</div>
);
}
}
//state를 사용하여 접근하는 경우
export default class test extends Component {
state = {
person:[
{name:'박시우', age:145},
{name:'박지웅', age:27},
{name:'박상웅', age:245},
]
}
render() {
return (
<div className="App">
<Person name={this.state.person[0].name} age={this.state.person[0].age} />
<Person name={this.state.person[1].name} age={this.state.person[1].age} />
<Person name={this.state.person[2].name} age={this.state.person[2].age} />
</div>
)
}
}
// Person으로 구조분해할당하여 접근하는 경우
export default class test extends Component {
state = {
person:[
{name:'박시우', age:145},
{name:'박지웅', age:27},
{name:'박상웅', age:245},
]
}
render() {
const {person} = this.state;
return (
<div className="App">
<Person name={person[0].name} age={person[0].age} />
<Person name={person[1].name} age={person[1].age} />
<Person name={person[2].name} age={person[2].age} />
</div>
)
}
}
import React, {useState} from 'react';
function test() {
const [Count, setCount] = useState(0);
//class형 컴포넌트에선
// constructor(props) {
// super(props);
// this.state = {count:0};
// }
// es6문법 state = { count: 0};
return (
<div>
<p>You clicked {count} times</p>
<button onClick={() => setCount(count + 1)}>Click Me</button>
//class에선 this 키워드로 접근
//<button onClick={() => this.setState({count: this.state.count+1})>Click Me</button>
</div>
);
}
function ExampleWithManyStates() {
// 상태 변수를 여러 개 선언했습니다!
const [age, setAge] = useState(42);
const [fruit, setFruit] = useState('banana');
const [todos, setTodos] = useState([{ text: 'Learn Hooks' }]);
}
function Count() {
const [count, setCount] = useState(0);
const handleAdd = () => {
setCount(count+1);
};
const handleMinus = () => {
setCount(count-1);
};
return (
<div className="App">
<h1>Event handler practice</h1>
<button onClick={handleAdd}>+</button>
{count}
<button onClick={handleMinus}>-</button>
</div>
);
}
TIP
- 비쥬얼 스튜디오 코드의 검색해서 문자열 바꿔주는 단축키는
option+cmd+f 이다. 하드코딩은 아니아니 되오~
PS
- 블로깅하기 전까지는 클론코딩하면서 props와 state의 개념을
사전적으로 이해했었는데, 하면서 아 이걸 이래서 썼구나! 하며 알아가면서 코딩하니 리액트도 좀 재밌어지기 시작한다.