<label for="inputName">이름 :</label>
<input type="text" id="inputName">
위와같은 코드가 있다면 label의 for prop과 input의 id prop으로 찾아서 2개의 태그를 연결해준다.
또한 label을 누르면 input에 focus가 간다.
혹은 label 태그에 input을 넣어서 사용하는 경우도 있는데
input이 가질 수 있는 속성값은 다음과 같다.
text : 기본 값으로 텍스트를 입력할 수 있다.
password : 비밀번호를 입력하는 영역
file : 파일을 선택할 수 있는 별도의 창을 만들 수 있다.
radio : 라디오 버튼 - 공통된 name의 여러 버튼 중 한 가지를 선택할 수 있다. (단일선택)
checkbox : 체크 버튼 - 공통된 name의 여러 버튼 중 여러가지를 선택할 수 있다. (다중선택)
button : 일반적인 button 역할을 하는 버튼
submit : 전송을 위한 버튼
hidden : 일반적인 사용자들에게는 노출되지 않는 영역이지만 서버에 특정 값을 넘길 때 사용한다.
reset : 초기화 버튼
image : 이미지 형태의 전송 버튼
src : 속성을 사용해 이미지를 적용한다.
number : 숫자 입력 영역
tel : 전화 번호 입력 영역
url : 웹 페이지에 사용되는 url 입력 영역
date : 날짜 입력 창 영역 (년, 월, 일)
month : 년, 월을 선택하는 영역
week : 년, 주를 선택하는 영역
time : 시간 입력 영역
color : 색상을 선택할 수 있는 창을 띄운다.
email : email을 입력할 수 있는 영역
range : 특정 범위를 마우스로 드래그앤 드롭 방식으로 입력할 수 있는 영역
search : 검색어 입력 영역
무튼 여기서 넘어오는 값을 앞서 배운 전개연산자를 사용하여 전달할 수도 있다.
우선 넘기는 값 이때 id값이 dynamic할 수 있도록 신경써준다.
그럼 받는 값
onHideCar2t
라고 이름을 이상하게 설정해보았다.애플리케이션 곳곳에서 쓰일 data는 context로 관리하는게 좋다.
액트에서는 관습적으로 애플리케이션 전체 state 관리는 이름을 store라고 정한다.
context를 미리 초기화시켜두면 IDE 자동완성에 편리함을 느낄 수 있다.
import React from "react";
const CartContext = React.createContext({
items:[],
totalAmount:0,
addItem: item => {},
removeItem: id => {}
});
export default CartContext
context와 provider를 따로 나눠서 관리하면 좋다.
provider가 props을 받기도 하고 내보내기도 하고
Context 데이터를 관리하고, 그 context에 접근하려는 모든 컴포넌트에 제공도 하는 기능을 따로 관리하면 좋기 때문이다.
값을 가져다 쓸 때는 통상 다음과 같이 쓴다. 변수명 뒤에 context의 준말인 Ctx를 쓴다.
const 변수Ctx = useContext(context명);
reduce는 데이터 배열을 값 하나로 변환해 주는 메소드이다.
첫 번째 인수는 함수이고 두 번째 인수는 시작 값이다.
이때 첫번째 인수인 함수에는 2개의 매개변수를 또 받는다.
첫번째는 누진된 값 두번째는 현재 값
[0, 1, 2, 3, 4].reduce(function(accumulator, currentValue, currentIndex, array) {
return accumulator + currentValue;
});
이때 해당 컴포넌트가 사용자 정의 컴포넌트라면 사용할 수 없기 해당 컴포넌트의 매개변수에 forward을 추가
이렇게 해서, ref를 통해 인풋에 접근할 수 있다.
그래서 submitHandler 함수에 입력된 값을 읽을 수 있다.
이름Ref.current
에 접근할 수 있다.
useRef으로 생성된 ref에 대해서는 항상 .current를 써야 하고 .value를 써야 합니다
이름Ref.current
는 결국 해당 ref
에 저장된 input 요소를 가리키기 때문이다.value
속성을 갖는다. 그리고 이는 항상 String type이다.let bound = func.bind(context, [arg1], [arg2], ...);
<UserComponent onCallback={함수명.bind(null, 'webisfree')} />
즉, bind는 향후 실행을 위해서 함수를 사전에 구성한다
또한 2번째 매개변수로 기본적으로 인수를 미리 구성할 수 있다