티스토리 뷰
728x90
4.2.1 컴포넌트 생성 및 불러오기
4.2.1.1 컴포넌트 생성
- EventPractice.js 파일 생성 - 일단 클래스형으로
class EventPractice extends Component {
render() {
return (
<div>
<h1>이벤트 연습</h1>
</div>
);
}
}
export default EventPractice;
4.2.1.2 App.js에서 EventPractie 렌더링
import React from 'react';
import EventPractice from './EventPractice';
const App = () => {
return <EventPractice />;
};
export default App;
4.2.2 onChange 이베트핸들링하기
4.2.2.1 onChange 이벤트 설정
- EventPractice 컴포넌트에 input 요소를 렌더링하는 코드와 해당 요소에 oChange 이벤트를 설정하는 코드 작성
class EventPractice extends Component {
render() {
return (
<div>
<h1>이벤트 연습</h1>
<input
type="text"
name="message"
placeholder="아무거나 입력"
onChange={(e) => {
console.log(e.target.value);
}}
/>
</div>
);
}
- e.target.value < 입력 한 문자 표사
- e 객체는 SyntheticEvent로 웹 브라우저의 네이티브 이벤트를 감싸는 객체
4.2.2.2 state에 input 값 담기
state = {
message: '',
};
<input
type="text"
name="message"
placeholder="아무거나"
value={this.state.message}
onChange={(e) => {
this.setState({
message: e.target.value,
});
console.log(e.target.value);
}}
/>
4.2.2.3 버튼을 누를 때 comment 값을 공백으로 설정
- 입력한 state에 값이 잘 들어갔는지, 인풋에 그 값을 제대로 반영하는지 검증
<button
onClick={() => {
alert(this.state.message);
this.setState({
message: '',
});
}}
>
확인
</button>
- 확인 버튼을 눌렀을 때 입력한 값이 alert로 출력되면 잘 들어간 것
4.2.3 임의 메서드 만들기
- 이벤트 처리할 때 렌더리을 하는 동시에 함수를 만들어 전달 해주는 방법 대신 함수를 미리 준비하여 전달하는 방법도 있다.
- 성능상 차이는 거의 없지만 가독성은 훨씬 높다.
- onChange와 onClick에 전달한 함수를 따로 빼내서 컴포넌트 임의 메서드 생성
4.2.3.1 기본방식
<input
type="text"
name="message"
placeholder="아무거나 입력"
value={this.state.message}
onChange={this.handleChange}
/>
<button onClick={this.handleClick}>확인</button>
- 함수가 호출될 때 this.는 호출부에 따라 결정
- this를 컴포넌트 자신으로 제대로 가리키기 위해 메서드를 this와 바인딩 하는 작업 필요
- 바인딩하지 않으면 this는 undefined를 가리킨다
4.2.3.2 Property Initializer Syntax를 사용한 메서드 작성
- 메서드 바인딩은 생성자 메서드에서 하는 것이 정석
- 하지만 새 메서드를 만들때 마다 constructor도 수정 하기 때문 불편할 수 있다. 이 작업을 좀 더 간단하게 하는 방법이 바벨의 transform-class-properties 문법을 사용하여 화살표 함수 형태로 메서드를 정의 하는 것
// 4.2.3.2
handleChange = (e) => {
this.setState({
message: e.target.value,
});
};
handleClick = () => {
alert(this.state.message);
this.setState({
message: '',
});
};
- 훨씬 깔끔해진다.. ...
728x90
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 다른데서 react
- @reqeustBody
- ID
- 다중체크박스 처리
- 제약조건
- mircrosoft visual studio
- SCP
- 셀프로젝트
- @RequestParam
- 서버전송
- 셀렉트박스
- reactStart
- @Builder
- CheckBox
- reactApp
- App
- 체크박스
- 받아오기
- findFirstBy
- 아이디
- C
- optional
- selectbox
- react 시작 오류
- C언어
- React
- commit 에러
- 씹어먹는 C 언어
- th:selected
- JPA
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
글 보관함