제닉스 스톰엑스 TITAN MARK II 마우스


사용하던 마우스 휠이 고장나서 새로운 마우스를 구매했습니다.


마우스를 주로 이용하는 게임을 하지않기 때문에 


마우스에는 큰 관심이 없었는데 


문득 제닉스 마우스를 한번 써보고 싶은 생각에 구매하게 되었습니다.




박스 앞, 뒷면은 아래와 같습니다.




겉 표지를 벗기면 검은색 상자가 나옵니다.



구성품은 아래와 같습니다.


마우스, 사용자 메뉴얼, 공인용품 스티커



케이블 타이가 붙어있어서 휴대용으로도 괜찮을 것 같습니다.



연결 후 모습입니다.


LED는 총 6가지 색상을 지원하는 것 같습니다.



LED를 끄는 등 설정을 하기 위해서는 

제닉스에서 제공하는 SW를 설치해야합니다.


아래 링크에서 다운 가능합니다.


http://www.xenics.co.kr/shop/board/view.php?id=download&search[subject]=on&search[word]=mark&no=517




게이밍 마우스는 처음 구매했는데


클릭이나 스크롤은 만족스러운 느낌이 들었고,


생각보다 무거운 느낌이 들었습니다.


전체적인 평점은 4점을 주고싶습니다.


★ ★ ★ ★ ☆




이벤트 핸들링


이벤트 핸들링 특징과 방법을 정리 했습니다.


자바스크립트나 제이쿼리보다 간편한 느낌이 들었습니다.



리액트 이벤트 핸들링 특징


1. 리액트에서 이벤트의 이름은 카멜 표기법으로 사용

예) onclick  onClick   onchange  onChange 


카멜 표기법으로 사용 하지않을 경우 아래와 같은 경고가 발생하고 정상적으로 동작하지 않습니다.


<input type = "text"
name = "message"
placeholder = "input message"
onchange={
(e) =>{
// console.log(e);
console.log(e.target.value);
this.setState({
message:e.target.value
})
}
}
value = {this.state.message}
/>



2. 이벤트에 실행할 코드를 전달하는것이 아닌 함수 형태의 객체를 전달


<button onClick={
()=>{
this.setState({
message : ''
})
}
}>


3. DOM 요소에만 이벤트 사용 가능


<div> <button> <input>등 DOM요소에만 이벤트를 사용할 수 있습니다.


직접 만든 컴포넌트에는 이벤트 사용이 불가합니다.


아래와 같이 직접 만든 컴포넌트에 이벤트를 작성하더라도 이벤트가 발생하지 않습니다.


render() {
return (
<EventPractice onLoad={
()=>{
console.log("test");
}
}/>
);
}


이벤트 종류


리액트에서 지원하는 이벤트는 아래 표와 같습니다.


Clipboard 

Form 

Composition 

Mouse 

Keyboard 

Selection 

Focus 

Touch

UI 

Image 

Wheel 

Animation 

Media

Transition 

 




이벤트 핸들링


1. 함수를 바로 작성하여 핸들링


함수 형태의 객체를 넘기기 때문에 함수형태로 작성해서 이벤트를 핸들링 합니다.


render() {
return (
<div>
<h1>이벤트 연습 - 함수를 랜더링 시 만들어서 핸들링</h1>
<button onClick={
()=>{
alert(this.state.message);
this.setState({
message : ''
})
}
}>
초기화
</button>
<input type = "text"
name = "message"
placeholder = "input message"
onChange={
(e) =>{
this.setState({
message:e.target.value
})
}
}
value = {this.state.message}
/>
</div>
);
}



2. 함수를 미리 작성하여 핸들링


미리 만들어 놓은 함수를 전달하여 핸들링도 가능합니다.


생성자 함수에서 만들어 놓은 함수를 바인딩 해줘야 합니다. 


constructor(props){
super(props);
this.handleChange = this.handleChange.bind(this);
this.handleClick = this.handleClick.bind(this);
}

handleChange(e){
let inputMessage = e.target.value;
console.log("input message : ",inputMessage);
this.setState({
message : inputMessage
})
}

handleClick(){
console.log("message == ",this.state.message);
this.setState({
message : ''
})
}


사용은 동일 합니다.


render() {
return (
<div>
<h1>이벤트 연습2 - 만들어논 함수를 전달해서 핸들링</h1>
<input type = "text"
name = "message"
placeholder = "input message"
onChange={this.handleChange }
value = {this.state.message}
/>
<button onClick={this.handleClick}>
초기화
</button>
</div>
);
}



3. Property Initializer Syntax를 사용한 함수 작성


생성자 함수를 사용하여 바인딩하는방법이 정석이지만,


새로운 함수를 추가할 때마다 생성자 함수를 수정해야하는 번거로움이 있습니다.


바벨의 transform-class-properties 문법을 사용하여 작성하면 

생성자 함수를 사용하지 않고 동적으로 바인딩이 가능합니다.


handleChange = (e) => {
let inputMessage = e.target.value;
console.log("input message : ",inputMessage);
this.setState({
message : inputMessage
})
}

handleClick = () => {
console.log("message == ",this.state.message);
this.setState({
message : ''
})
}



4. 동일한 여러개의 태그 핸들링


동일한 여러개의 태그는 event객체를 활용해서 처리 가능 합니다.


e.target.name은 태그의 name과 같습니다.


아래와 같이 두개의 <input>태그가 있을 때


render() {
return (
<div>
<h1>input 여러개 핸들링</h1>
<input type = "text"
name = "name"
placeholder = "input name"
onChange={this.handleChange }
value = {this.state.name}
/>
<input type = "number"
name = "age"
placeholder = "input message"
onChange={this.handleChange }
value = {this.state.age}
/>
<button onClick={this.handleClick}>
초기화
</button>
</div>
);
}


아래의 형태로 사용이 가능합니다.


[]를 쓰게되면 key가 됩니다.


state = {
name : ''
,age : 0
}


handleChange = (e) => {
console.log("e.target.name = ",e.target.name);
console.log("e.target.value = ",e.target.value);
this.setState({
[e.target.name] : e.target.value
})
}




5. onKeyPress 이벤트 핸들링


위의 예제에서 Enter키를 입력하면 초기화 버튼을 클릭하는 이벤트를 작성했습니다.


이벤트 처리를 위한 함수 작성


handleClick = () => {
alert("초기화!");
console.log("name = ",this.state.name, " age = ",this.state.age);
this.setState({
name : ''
,age : 0
})
}

handleKeyPress = (e) =>{
if(e.key === 'Enter'){
this.handleClick();
}
}


<input type = "number"
name = "age"
placeholder = "input message"
onChange={this.handleChange }
value = {this.state.age}
onKeyPress = {this.handleKeyPress}
/>



참고 : 리액트를 다루는 기술(저:VELOPERT)




'언어 > ReactJS' 카테고리의 다른 글

[React] 컴포넌트 반복  (0) 2019.05.05
[React] Ref  (0) 2019.05.02
[React] State  (0) 2019.04.12
[React] Props  (1) 2019.04.11
[React ]개발 환경  (1) 2019.04.08

퀵 정렬(Quick Sort)




퀵정렬? 

퀵 정렬은 빠른 속도와, 간단한 구현방법 때문에

가장 많이 사용하는 정렬 방법으로 알려져 있습니다.


구현방법이 간편하다고 하지만, 개인적으로 이해하는데 시간이 좀 걸렸습니다.


퀵 정렬은 피벗으로 왼쪽에는 작은 값 오른쪽에는 큰값으로 정렬하는 방법입니다.


피벗?

특정 기준은 피벗(pivot)이라고 부릅니다.


복잡도

최악의 경우의 복잡도는 아래와 같지만 

(최악의 경우 : 피벗이 가장 작은 수 이거나 가장 큰 수가 계속 선정되는 경우)



평균적인 복잡도는 아래와 같습니다.



어떠한 방법?

피벗을 가장 마지막 인덱스로 설정했습니다.


아래와 같은 배열이 있을 때 



피벗 6을 기준으로 왼쪽과 오른쪽 끝에서부터


왼쪽은 6보다 큰 수 오른쪽은 6보다 작은 수를 찾습니다.



양쪽 다 찾은 수가 있다면 자리를 교환 해줍니다.



교환 후 계속해서 진행 한 후 


왼쪽과 오른쪽의 수가 같아 지면 종료하고 


피벗과 만난지점의 자리를 바꿔줍니다.



자리를 바꾼뒤 확인 해보면


피벗 기준으로 왼쪽에는 작은 수 오른쪽에는 큰수만 오게 됩니다.



각각 나눠진 영역에서 반복해서 같은 방법으로 진행 하면 정렬이 됩니다.


반복은 재귀호출로 진행하게 됩니다.



배열과 재귀호출을 이용한 퀵 정렬 예제


퀵 정렬 함수


if문 : 재귀 호출을 통해 종료를 위한 조건문


첫번째 while : 피벗보다 작은 수 큰 수를 찾기위한 반복문


두번째, 세번째 while : 각각 피벗보다 작은 수, 큰수를 찾는 반복문


첫번째 재귀 호출 : 피벗 기준 왼쪽을 정렬하기 위한 재귀 호출


두번째 재귀 호출 : 피벗 기준 오른쪽을 정렬하기 위한 재귀 호출


void quick_sort(int array[], int size){
int pivot, temp;
if(size>1){
pivot = array[size-1];
int left = -1;
int right = size-1;
while(1){
while(array[++left]<pivot);
while(array[--right]>pivot);
if(left>=right) break;
temp = array[left];
array[left] = array[right];
array[right] = temp;
}
temp = array[left];
array[left] = array[size-1];
array[size-1] = temp;
quick_sort(array, left);
quick_sort(array+left+1, size-left-1);
}
}


배열 출력 함수


void print_array(int array[], int size){
for(int i=0; i<size; i++){
printf("%-4d",array[i]);
}
printf("\n");
}


실행 함수


정렬 전 배열과 위의 기준대로 정렬한 결과를 출력합니다.


void main(){
int array[] = {2,7,1,3,4,0,8,5,9,6};
int size = sizeof(array)/sizeof(int);
printf("########### Sorting before ###########\n");
print_array(array, size);
quick_sort(array, size);
printf("########### Sorting after ###########\n");
print_array(array, size);
}


실행 결과




참고 : C로 배우는 알고리즘 (이재규)

위키백과(퀵 정렬)




관련 포스팅


[DataStructure] 기수 정렬(Radix Sort)

[DataStructure] 퀵 정렬(Quick Sort)

[DataStructure] 셸 정렬(Shell Sort)

[DataStructure] 버블 정렬(Bubble Sort)

[DataStructure] 삽입 정렬(Insertion Sort)

[DataStructure] 선택 정렬(Selection Sort)



'언어 > Data Strcuture' 카테고리의 다른 글

[C] 힙 정렬(Heap Sort)  (0) 2019.05.01
[C] 기수 정렬(Radix Sort)  (1) 2019.04.30
[C] 셸 정렬(Shell Sort)  (2) 2019.04.23
[C] 버블 정렬(Bubble Sort)  (0) 2019.04.20
[C] 삽입 정렬(Insertion Sort)  (0) 2019.04.19

셸 정렬(Shell Sort)




셸 정렬?

셸 정렬은 Donald Shell이라는 분이 창안해서 이름이 셸 정렬이 되었다고 합니다.


셸 정렬은 삽입정렬의 단점을 보완하기 위해 등장한 정렬방법입니다.

(단점 예 : 내림차순으로 정렬된 항들을 오름차순으로 정렬하려면 모든 항을 계산 해야 하는 점)


효율 적인 삽입 정렬을 위해 특정 기준으로 사전에 정렬을 수행한 후에 삽입정렬을 수행합니다.


사전에 진행하는 정렬은 특정 기준을 정해서 진행합니다.


어떠한 방법?

저는 길이가 10개인 배열을 2로 나누면서 기준을 잡았습니다.


총 크게 3번 정렬을 진행 했습니다.


10/2 = 5, 5/2 = 2(int형이므로 2.5에서 버림처리), 2/2 =1


아래와 같이 배열에 10개의 인자가 있을 때



1번째 정렬은 5개씩 나눠서 각각 비교해서 정렬 합니다.

각 대응되는 항의 크기를 비교해서 정렬을 하면 아래와 같습니다.




2번째 정렬은 2개 전 항과 비교하며 정렬합니다.


2개의 항씩 정렬하고나면 아래와 같습니다.


마지막으로 3번째 정렬은 전체 항을 삽입 정렬 합니다.



배열을 이용한 셸 정렬 예제


셸 정렬 함수


첫번째 for문 : 5개, 2개, 1개씩 비교를 위한 기준 for문,


두번째 for문 : 기준까지만(5,2,1) 반복하기 위한 for문


세번째 for문 : 위 기준대로 반복하는 for문


while문 : 위 그림들 처럼 비교했을 때 작을경우 삽입하는 동작을 수행


void shell_sort(int array[], int size){
for(int i=size/2; i>0; i /=2){
for(int j=0; j<i; j++){
for(int k=i+j; k<size; k+=i){
int l = array[k];
int m = k;
while(m>i-1 && array[m-i] > l){
array[m]=array[m-i];
m -= i;
}
array[m] = l;
}
}
printf("i=%d || ",i);
print_array(array,size);
}
}


배열 출력 함수


void print_array(int array[], int size){
for(int i=0; i<size; i++){
printf("%-4d",array[i]);
}
printf("\n");
}


실행 함수


정렬 전 배열과 위의 기준대로 정렬한 결과를 출력합니다.


void main(){
int array[] = {11,10,33,22,55,9,99,81,15,27};
int size = sizeof(array)/sizeof(int);
printf("########### Sorting before ###########\n");
print_array(array, size);
printf("######################################\n");
shell_sort(array, size);
}


실행 결과



참고 : C로 배우는 알고리즘 (이재규)

위키백과(셸 정렬)



관련 포스팅


[DataStructure] 기수 정렬(Radix Sort)

[DataStructure] 퀵 정렬(Quick Sort)

[DataStructure] 셸 정렬(Shell Sort)

[DataStructure] 버블 정렬(Bubble Sort)

[DataStructure] 삽입 정렬(Insertion Sort)

[DataStructure] 선택 정렬(Selection Sort)





'언어 > Data Strcuture' 카테고리의 다른 글

[C] 기수 정렬(Radix Sort)  (1) 2019.04.30
[C] 퀵 정렬(Quick Sort)  (0) 2019.04.24
[C] 버블 정렬(Bubble Sort)  (0) 2019.04.20
[C] 삽입 정렬(Insertion Sort)  (0) 2019.04.19
[C] 선택 정렬(Selection Sort)  (0) 2019.04.19

버블 정렬(Bubble Sort)




버블 정렬 ? 

버블 정렬은 거품 정렬이라고도 불리는 정렬 입니다.


아래 그림과 같이 인접하는 두 항을 


전부 비교해서 정렬하는 방법입니다.



n개의 항이 있다면 n-1번씩 비교 하게 됩니다.


정렬 알고리즘 중에서 가장 비효율적인 방법이라고 합니다.



배열을 이용한 버블 정렬 예제


버블 정렬 함수


이전항(array[j-1]), 다음항(array[j])을 비교해서 

이전항이 클 경우 자리를 바꿔주고 그렇지 않으면 패스합니다.

void bubble_sort(int array[], int size){
int t;
for(int i=0; i<size-1; i++){
for(int j=1; j<size; j++){
if(array[j-1]>array[j]){
t = array[j-1];
array[j-1] = array[j];
array[j] = t;
}
}
}
}


실행 함수


정렬 전과 후 배열 출력


void main(){
int array[] = {11,10,33,22,55,9};
int size = sizeof(array)/sizeof(int);
printf("########### Sorting before ###########\n");
for(int i=0; i<size; i++){
printf("%-4d",array[i]);
}
bubble_sort(array,size);
printf("\n########### Sorting after ###########\n");
for(int i=0; i<size; i++){
printf("%-4d",array[i]);
}
}


실행 결과




참고 : C로 배우는 알고리즘 (이재규)

위키백과(버블정렬)




관련포스


[DataStructure] 기수 정렬(Radix Sort)

[DataStructure] 퀵 정렬(Quick Sort)

[DataStructure] 셸 정렬(Shell Sort)

[DataStructure] 버블 정렬(Bubble Sort)

[DataStructure] 삽입 정렬(Insertion Sort)

[DataStructure] 선택 정렬(Selection Sort)



'언어 > Data Strcuture' 카테고리의 다른 글

[C] 퀵 정렬(Quick Sort)  (0) 2019.04.24
[C] 셸 정렬(Shell Sort)  (2) 2019.04.23
[C] 삽입 정렬(Insertion Sort)  (0) 2019.04.19
[C] 선택 정렬(Selection Sort)  (0) 2019.04.19
[C] 트리(Tree)  (0) 2019.04.07

삽입 정렬(Insertion Sort)




삽입 정렬?

삽입 정렬은 이미정렬된 앞부분의 항들과 비교해서


사이에 작은 수를 삽입하여 정렬하는 방법입니다.


아래 위키백과의 애니메이션을 보면 쉽게 이해할 수 있습니다.


https://ko.wikipedia.org/wiki/%EC%82%BD%EC%9E%85_%EC%A0%95%EB%A0%AC


복잡도

삽입정렬의 복잡도는 아래와 같습니다.



배열을 이용한 삽입 정렬 예제


삽입 정렬 함수


기준항(temp)와 정렬된 앞 요소들의 크기를 비교하고 한칸 씩  뒤로 옮긴 후 기준항을 삽입합니다.


두 번째 항부터 비교를 시작하므로 i는 1부터 시작합니다.


void insertion_sort(int array[], int size){
int j,temp;
for(int i=1; i<size; i++){
j=i;
temp = array[i];
while(j>0 && array[j-1]>temp){
array[j] = array[j-1];
j--;
}
array[j] = temp;
}
}


실행 함수


정렬 전과 후 배열 출력


void main(){
int array[] = {11,10,33,22,55,9};
int size = sizeof(array)/sizeof(int);
printf("########### Sorting before ###########\n");
for(int i=0; i<size; i++){
printf("%-4d",array[i]);
}
insertion_sort(array,size);
printf("\n########### Sorting after ###########\n");
for(int i=0; i<size; i++){
printf("%-4d",array[i]);
}
}


실행 결과




참고 : C로 배우는 알고리즘 (이재규)

위키백과(삽입정렬)




관련 포스팅


[DataStructure] 기수 정렬(Radix Sort)

[DataStructure] 퀵 정렬(Quick Sort)

[DataStructure] 셸 정렬(Shell Sort)

[DataStructure] 버블 정렬(Bubble Sort)

[DataStructure] 삽입 정렬(Insertion Sort)

[DataStructure] 선택 정렬(Selection Sort)




'언어 > Data Strcuture' 카테고리의 다른 글

[C] 셸 정렬(Shell Sort)  (2) 2019.04.23
[C] 버블 정렬(Bubble Sort)  (0) 2019.04.20
[C] 선택 정렬(Selection Sort)  (0) 2019.04.19
[C] 트리(Tree)  (0) 2019.04.07
[C] 큐(Queue)  (2) 2019.04.01

선택 정렬(Selection Sort)




선택 정렬?

선택 정렬은 기준 항과 우측항 전체를 다 비교한 후 가장 작은수를 가장 앞으로 이동해서 정렬하는 방법입니다.


아래 위키백과의 애니메이션을 보면 쉽게 이해할 수 있습니다.


https://ko.wikipedia.org/wiki/%EC%84%A0%ED%83%9D_%EC%A0%95%EB%A0%AC


복잡도

선택정렬의 복잡도는 아래와 같습니다.




배열을 이용한 선택 정렬 예제


선택 정렬 함수


최소값(min)과 최소값의 인덱스(minIndex)를 구한 후 기준항(array[i])과 자리 교체


void selection_sort(int array[], int size){
int min, minIndex;
for(int i=0; i<size-1; i++){
int min = array[i];
int minIndex = i;
for(int j=i+1; j<size; j++){
if(min>array[j]){
min = array[j];
minIndex = j;
}
}
array[minIndex] = array[i];
array[i] = min;
}
}


실행 함수


정렬 전과 후 배열 출력


void main (){
int array[] = {11,10,33,22,55,9};
int size = sizeof(array)/sizeof(int);
printf("########### Sorting before ###########\n");
for(int i=0; i<size; i++){
printf("%-4d",array[i]);
}
printf("\n########### Sorting after ###########\n");
selection_sort(array, size);
for(int i=0; i<size; i++){
printf("%-4d",array[i]);
}
}


실행 결과





참고 : C로 배우는 알고리즘 (이재규)

위키백과(선택정렬)



관련 포스팅


[DataStructure] 기수 정렬(Radix Sort)

[DataStructure] 퀵 정렬(Quick Sort)

[DataStructure] 셸 정렬(Shell Sort)

[DataStructure] 버블 정렬(Bubble Sort)

[DataStructure] 삽입 정렬(Insertion Sort)

[DataStructure] 선택 정렬(Selection Sort)




'언어 > Data Strcuture' 카테고리의 다른 글

[C] 버블 정렬(Bubble Sort)  (0) 2019.04.20
[C] 삽입 정렬(Insertion Sort)  (0) 2019.04.19
[C] 트리(Tree)  (0) 2019.04.07
[C] 큐(Queue)  (2) 2019.04.01
[C] 스택(Stack)  (1) 2019.03.29

State


State? 

유동적인 데이터를 다룰 때 사용하는 요소


State 특징

1) props는 부모 컴포넌트가 설정하기때문에 읽기 전용으로만 사용 가능합니다.


2) 컴포넌트 내부에서 사용하기 위해서는 state를 사용해야 합니다.



State 사용


1. state 값 지정


state 값을 지정하는 방법은 두 가지가 있습니다.


1) constructor 함수를 사용

constructor함수는 생성자함수 라고도 불리며 생성자 안에 state를 지정합니다.


import React, { Component } from 'react';

class StateComponent extends Component {
constructor(props){
super(props);
this.state = {
number : 100
}
}

render() {
return (
<div>
숫자 : {this.state.number}
</div>
);
}
}

export default StateComponent;


2) transform-class-properties 문법

바벨의 transform-class-properties 문법으로 사용하는 방법입니다. constructor함수보다 간편합니다.


constructor와 동시에 사용하면 constructor가 우선적으로 적용 됩니다.

 

import React, { Component } from 'react';

class StateComponent extends Component {
state = {
name : "HyeUng"
,number : 100
}

render() {
return (
<div>
숫자 : {this.state.number}
이름 : {this.state.name}
</div>
);
}
}

export default StateComponent;


2. state 값 업데이트


업데이트는 setState함수로 가능합니다.


아래 형태로 업데이트를 할 수 있습니다.


this.setState({

  수정 할 필드 이름 : 값

  , .... : ...

});


import React, { Component } from 'react';

class StateComponent extends Component {
state = {
name : "HyeUng"
,number : 100
}

render() {
return (
<div>
숫자 : {this.state.number}
<br/><br/>
<button onClick={()=>{
this.setState({
number : this.state.number - 1
})
}
}>빼기</button>
</div>
);
}
}

export default StateComponent;


실행결과


5번 클릭한 결과입니다.




참고 : 리액트를 다루는 기술(저:VELOPERT)


관련 포스팅

[React] State

[React] Props






'언어 > ReactJS' 카테고리의 다른 글

[React] 컴포넌트 반복  (0) 2019.05.05
[React] Ref  (0) 2019.05.02
[React] 이벤트 핸들링  (2) 2019.04.25
[React] Props  (1) 2019.04.11
[React ]개발 환경  (1) 2019.04.08

Props


Props?

prperties를 줄인 표현으로 컴포넌트 속성을 설정할 때 사용하는 요소


Props 특징

1) Props는 부모컴포넌트에서만 사용 가능합니다.

2) 변하지 않는 데이터를 다룰 때 사용합니다.



Props 렌더링 과정 

props 렌더링 → props 값 설정  props 기본 값 설정  props 값 검증


1. jsx 내부에서 props 렌더링


this키워드로 props에 접근 가능합니다.


PropComponent.js


import React, {Component} from 'react';
import PropTypes from 'prop-types';

class PropComponent extends Component{
render(){
return(
<div>
<p>안녕하세요, 제이름은 {this.props.name} 입니다.</p>
</div>
)
}

export default PropComponent;


app.js

import React, { Component } from 'react';
import './App.css';
import PropComponent from './component/PropComponent';

class App extends Component {
render() {
return (
<PropComponent name="hyeung"/>
);
}
}

export default App;


실행 결과





2. props 값 설정, 기본값 설정


defaultProps 객체를 이용해서 기본으로 값을 설정 가능하고, 별도 설정이 없다면 기본으로 설정된 값이 사용 됩니다.


값을 설정하는 방법은 두 가지가 있습니다.


1) 클래스 밖에서 설정



PropComponent.defaultProps= {
name : 'default name'
}


2) transform-class-properties 문법


class PropComponent extends Component{
static defaultProps = {
name : '기본 이름'
,age : 30
}
render(){
return(
<div>
<p>안녕하세요, 제이름은 {this.props.name} 입니다.</p>
<p>나이는 {this.props.age}살 입니다.</p>
</div>
)
}
}




3. props 값 검증


props 값 검증을 위해 타입을 지정할 수 있습니다.


1) props type 지정


type역시 값 설정과 같이 두가지 방법으로 설정이 가능합니다.


isRequired를 사용하면 필수값으로 지정이 가능합니다.


import React, {Component} from 'react';
import PropTypes from 'prop-types';

class PropComponent extends Component{
static defaultProps = {
name : '기본 이름'
,age : 30 // 제거 시 에러(isRequired)
}
static propTypes = {
name : PropTypes.arrayOf(PropTypes.string)
,age : PropTypes.number.isRequired
}
render(){
return(
<div>
<p>안녕하세요, 제이름은 {this.props.name} 입니다.</p>
<p>나이는 {this.props.age}살 입니다.</p>
</div>
)
}
}
PropComponent.defaultProps= {
name : 'default name'
}

PropComponent.propTypes = {
name : PropTypes.string
}

export default PropComponent;

 

2) props type 종류

- array : 배열

- bool  : true, false

- func  : 함수

- number : 숫자

- object : 객체

- string : 문자열

- symbol : ES6문법의 심볼 객체

- node   : 렌더링할 수 있는 모든 것(숫자, 문자열, element 또는 이들로 구성된 배열)

- element : 리액트 요소

- instanceof(MyClass) : 특정 클래스의 인스턴스

- oneOf(['male','Female']) : 주어진 배열 요소 중 값 하나

- oneOfType([React.PropTypes.string, React.PropTypes.number]) : 주어진 배열 안 요소중 하나

- arrayOf(React.PropTypes.number) : 주어진 종류로 구성된 배열

- objectOf(React.PropTypes.number) : 주어진 종류의 값을 가진 객체

- shape({name:React.PropTypes.string, age:React.PropTypes.number}) : 주어진 스키마를 가진 객체

- any : 아무 종류



3) 타입 관련 error


타입관련된 에러를 직접 발생 시켜 봤습니다.


name 타입을 잘못 입력하고, 

필수값인 age를 입력하지 않았습니다.


PropComponent.js


import React, {Component} from 'react';
import PropTypes from 'prop-types';

class PropComponent extends Component{
static defaultProps = {
// name : '기본 이름'
// ,age : 30 // 제거 시 에러(isRequired)
}
static propTypes = {
// name : PropTypes.arrayOf(PropTypes.string)
name : PropTypes.string
,age : PropTypes.number.isRequired
}
render(){
return(
<div>
<p>안녕하세요, 제이름은 {this.props.name} 입니다.</p>
<p>나이는 {this.props.age}살 입니다.</p>
</div>
)
}
}

export default PropComponent;

  

app.js

 
class App extends Component {
render() {
return (
<PropComponent name={3} />
);
}
}


페이지는 정상적으로 렌더링 되는 것처럼 보이지만




개발자 도구 콘솔창에는 에러가 발생 했습니다.


첫 번째는 string 타입인데 number 타입을 적용 한 경우

두 번째는 필수값을 입력하지 않아 undefined가 들어가서 발생한 경우 입니다.





관련 포스팅

[React] State

[React] Props




참고 : 리액트를 다루는 기술(저:VELOPERT)




'언어 > ReactJS' 카테고리의 다른 글

[React] 컴포넌트 반복  (0) 2019.05.05
[React] Ref  (0) 2019.05.02
[React] 이벤트 핸들링  (2) 2019.04.25
[React] State  (0) 2019.04.12
[React ]개발 환경  (1) 2019.04.08

React 개발환경



1. React?



React는 자바스크립트 라이브러리오직 View만 신경쓰는 라이브러리 입니다.


React는 DOM을 복사해서 Virtual DOM을 사용합니다.


변화가 생겼을 때 페이지 전체를 렌더링 하지않고, 변화한 부분만 실제 DOM에 적용하는 방식을 사용합니다. 




2. 개발 환경




1) Node.js / npm 설치


Babel, Webpack등을 사용하기 위해 NodeJS와 npm 설치가 필요합니다.


아래 URL에서 다운 가능합니다.


https://nodejs.org/ko/download/


설치를 완료하고 node -v 명령과 npm-v 명령으로 

노드와 npm 버전 확인이 가능합니다.




2) yarn 설치




npm은 의존하는 라이브러리 개수가 많으면 속도가 매우 저하 되기때문에 yarn 도구도 설치해줍니다.


아래 URL에서 windows용 다운 가능합니다.


https://yarnpkg.com/en/docs/install#windows-stable


yarn 역시 yarn -v명령으로 버전확인이 가능합니다.


해당 명령이 실행되지 않을 경우

 

yarn이 설치되어있는 경로 \bin폴더 까지 환경변수를 잡아주시면 됩니다.


3) VSCODE 설치



Visual Studio Code는 에디터 이지만, 


javascript 외에도 확장 프로그램을 설치하면 


C, Java, Spring boot 등 다양한 언어도 사용 가능해서 간편합니다.


아래 URL에서 설치 다운 가능 합니다.


https://code.visualstudio.com/download




3. 테스트 프로젝트 생성


1) create-react-app 도구 설치


npm, yarn 도구 둘다 설치 가능합니다.


저는 yarn을 이용해서 전역으로  설치했습니다.


터미널에 다음과 같이 입력해서 설치합니다.


> yarn global add create-react-app


2) 프로젝트 생성


create-react-app 도구를 이용해서 프로젝트를 생성합니다.


터미널에 다음과 같이 입력해서 설치합니다.


> create-react-app 프로젝트 명


프로젝트명으로 대문자는 사용이 불가합니다.


작업 환경에 따라서 1분~3분정도 소요됩니다.



3) 로컬 서버 실행


프로젝트가 생성되었으면, 해당 프로젝트로 이동 후


터미널창에 아래와 같이 입력하면 빌드후 로컬 서버가 실행됩니다.


로컬서버는 기본으로 3000번으로 열립니다.


파일이 수정될때마다 자동으로 다시 빌드하고 페이지를 리로드합니다.


> yarn start





참고 : 리액트를 다루는 기술(저:VELOPERT)

'언어 > ReactJS' 카테고리의 다른 글

[React] 컴포넌트 반복  (0) 2019.05.05
[React] Ref  (0) 2019.05.02
[React] 이벤트 핸들링  (2) 2019.04.25
[React] State  (0) 2019.04.12
[React] Props  (1) 2019.04.11

+ Recent posts