import React, { useState } from 'react';

const InputTest() => {

  const [text, setText] = useState('');
  const onChange = (e) => { 
    setText(e.target.value);
    // 입력할 때 마다 setText의 값 변경
  };
  const onReset = () => {
    setText('');
    // 값 초기화
  };
  return(
    <div>
      <input placeholder="값을 입력하세요." onChange={onChange} value={text} />
      <!-- 값이 변경될 때 마다 text의 값을 불러옴 -->
      <button onClick={onReset}>초기화</button>
      <!-- 클릭시 값 초기화 -->
      <div> 값 : </div>
    </div>
  )
};

 

 

 

input 여러개일 때

import React, { useState } from 'react';

const InputTest() => {

  const [text, setText] = useState({
    name: '',
    nickname: ''
  });
  
  const { name, nickname } = inputs; 
  // 비구조화 할당으로 값 추출
  
  const onChange = (e) => { 
    const { value, name } = e.target;
    // e.target 에서 name, value 값 추출 
    // 객체 수정 -->
    setInputs({
      ...inputs, // input 객체 복사 
      [name]: value // name 키를 가진 value로 설정 
    });
  };
  
  const onReset = () => {
    setText({
      name: '',
      nickname: '',
    });
  };
  return(
    <div>
      <input placeholder="이름" onChange={onChange} value={name} />
      <input placeholder="닉네임" onChange={onChange} value={nickname} />
      
      <button onClick={onReset}>초기화</button>
      
      <div> 값 : </div>
    </div>
  )
};

'개발 > React' 카테고리의 다른 글

[React] 이벤트 버블링 막기  (0) 2022.11.02
[React] Node + Express 서버와 React 연동  (0) 2022.10.22
[React] props(Propeties)  (0) 2022.05.12
[React] reduce, useMemo, useCallback  (0) 2022.04.29

부모 컴포넌트에서 내려준 값을 자식 컴포넌트에서 사용하는 것을 의미

 

컴포넌트에서 다른 컴포넌트로 데이터 전달(props 전달)

전달기능(함수)는 부모 컴포넌트에서 구현 부모->자식에게 전달(형제 컴포넌트는 서로 props를 전달할 수 없다)

자식 컴포넌트에서 부모 컴포넌트로 콜백 함수를 사용하여 props를 전달할 수 있음

 

부모 -> 자식에게 전달

// 부모
import React from 'react';
import Child from './Child';

const Parent = () => {
  return(
    <div>
      <Child money={1000}/>
      <!-- money로 props의 속성을 지정 후 값 1000을 할당 -->
    </div>
  );
};

<!-- 자식 -->
import React from 'react';

const Child = (props) => {
          <!-- money -->
  return(
    <div>
      <p>{props.money}</p>
      <!-- props 속성에 접근하기 위해 props.money 사용 -->
    </div>
  );
};

 

 

 

자식 -> 부모에게 전달

// 부모
import React from 'react';
import Child from './Child';

const Parent = () => {
  function Click(money){
    alert(money);
  };
  // 부모에서 함수 구현 
  return(
    <div>
      <Child money={1000} Click={click} />
    </div>
  );
};

<!-- 자식 -->
impore React from 'react';

const Child = (props) => {
  return(
    <div>
      <button onClick={() => {
        props.Click(props.money);
        }};
      >
        값 전달
      </button>
    </div>
  );
};

 

 

 

부모 컴포넌트에서 전달하는 props 값이 없을 때

// 부모
import React from 'react';
import Child from './Child';

const Parent = () => {
  return(
    <div>
      <Child />
    </div>
  );
};

<!-- 자식 -->
import React from 'react';

const Child = (props) => {
  return(
    <div>
      <p>{props.money}</p>
      <!-- ? 값이 없을경우 -->
    </div>
  );
};

부모 컴포넌트에서 props를 전달하지 않을 경우 기본값을 설정

기본 값은 컴포넌트 밖에, 자식 컴포넌트 안에서 선언해준다

// 자식 컴포넌트
import React from 'react';

const Child = (props) => {
  return(
    <div>
      <p>{props.money}</p>
    </div>
  );
};
// 기본 값 설정 !
Child.defaultProps = {
  money: 10000
}


// 기본 값의 propTypes 설정
// 설정한 type과 다를 경우 콘솔창에 오류 발생
// import PropTypes from "prop-types"; 해줘야함
// isRequired - 필수 입력

Child.defaultProps = {
  name: PropTypes.string.isRequired,
  children: PropTypes.number
};

++

// 자식 컴포넌트
import React from 'react';

const Child = (props) => {
  return(
    <div>
      <p>{props.money}</p>
    </div>
  );
};

const Child = (props) => {}
// 요즘에는 이렇게 안하고
const Child = ({ name, color, subject = "먼지" }: Child) => {}
// 이런식으로 많이 사용한다고 함

 

 

사용 예시

import React from 'react';
import Child from './Child';

const Parent = () => {
  return(
    <div>
      <Child name="dust" color="black" subject="먼지" />
      <Child name="berry" color="red" subject="빨강" />
      <Child />
    </div>
  );
};

// 
import React from 'react';

const Child = (props) => {
  return(
    <div>
      <p style={{ color: props.color }}>{props.name}는 {props.subject}(이)야</p>
    </div>
  );
};

Child.defaultProps = {
  name: 'sea',
  color: 'blue',
  subject: '파랑'
}

 

결과

import React from 'react';
import Child from './Child';

const Parent = () => {
  return(
    <div>
      <Child name="dust" color="black" subject="먼지" />
      <Child name="berry" color="red" subject="빨강" />
      <Child />
    </div>
  );
};

// 
import React from 'react';

////////////// 변경된 부분 ////////////////////////
const Child = ({ name, color, subject }) => {
  return(
    <div>
      //////////// props. 를 제외하고 변수명만 적어줌
      <p style={{ color: color }}>{name}는 {subject}(이)야</p>
    </div>
  );
};

Child.defaultProps = {
  name: 'sea',
  color: 'blue',
  subject: '파랑'
}

또는 이런식으로 변경할 수 있다

 

props.children

import React from 'react';
import Child from './Child';

const Parent = () => {
  return(
    <div>
      <Child>먼지</Child>
    </div>
  );
};

// 
import React from 'react';

const Child = (props) => {
  return(
    <div>
      <p>{props.name}는 {props.children}(이)야</p>
      <!-- dust는 먼지야 -->
      <!-- default 값은 밑에서 가져오고 children 값은 태그 내에 있는 값을 가져옴 -->
    </div>
  );
};

Child.defaultProps = {
  name: 'dust'
}

사용 예시

import React from 'react';
import Child from './Child';
import Hello from './Hello';

const Parent = () => {
  return(
    <div>
      <Child>
      	<p>먼지</p>
        <Hello color="pink" />
      </Child>
    </div>
  );
};

<!-- -->
import React from 'react';

const Child = ({ name="dust", children }) => {
  return(
    <div>
      <p>{name}는 {children}</p>
      <!-- 
        dust는 먼지 
        안녕하세요! 
        / 출력 
      -->
    </div>
  );
};

const Hello({ color }) => {
  return <div style={{ color }}> 안녕하세요!(분홍색) </div>
}

 

 

여러개의 props

const Parent = () => {
  const dust = { 
    name: 'dust',
    color: 'black',
    subject: '먼지'
  };
  <!-- const { name, color, subject } = dust; 생략가능 -->
  
  const dust2 = { 
    name: 'dust2',
    color: 'white',
    subject: '먼지2'
  };
  // 이렇게도 쓸 수 있는지? 
  <!-- const { name, color, subject } = dust2; 생략가능 -->
  
  return(
    <div>
      <Child {...dust} />
      // 속성값 전부 불러오기
      <Child {...dust2}/>
    </div>
  );
};

//////////////////////////////////////

const Child = ({ color, name, subject }) => {
  return( 
    <div>
      <p style={{ color }}>{name}는 {subject}(이)야</p>
      <!-- 
        변수명은 달라야하기 때문에 이렇게 사용은 불가능 함 
        한줄에 dust, dust2를 같이 불러오기x
        그렇게 하고 싶을경우 배열로 넘기거나 아니면 변수명이 달라야함
      -->
    </div>
  );
};

Child.defaultProps = {
  name: 'sea',
  color: 'blue',
  subject: '파랑'
}

 

 

 

'개발 > React' 카테고리의 다른 글

[React] Node + Express 서버와 React 연동  (0) 2022.10.22
[React] input 상태 관리  (0) 2022.05.16
[React] reduce, useMemo, useCallback  (0) 2022.04.29
[React] useEffect  (0) 2022.04.22

원래 요만했는데

으른 옵투샤
뿌듯 근데 진짜,, 왤케 다 짙어지는걸까…?



'다육' 카테고리의 다른 글

07/10 식물일기  (0) 2022.07.10
06/09 식물일기  (0) 2022.06.09
04/26 식물일기  (0) 2022.04.27
04/20 식물일기  (1) 2022.04.21

order

flex 후 출력 순서를 변경하고 싶을 때

- 기본값은 0

- 작은 값이 있는 요소부터 출력

- 값이 같다면 입력한 순서대로 출력

예시

/* 부모요소 */
inner{
 display: flex;
};
/* 자식요소 */
inner-box:first-child{
 order: 1;
};
inner-box:nth-child(2){
 order: 2;
}

노란 개구리를 세번째로 이동

 

-3 으로 앞으로 갈 수도 있음 빨간 개구리를 맨 앞으로 이동(작은 값의 요소 부터 출력)

 

 

 

align-items

교차축 요소를 정렬

- flex의 주축(main-axis)과 교차축(cross-axis)

- flex의 default 값은 row(가로정렬/주축) 이기 때문에 align-items: center; 일 경우 세로(교차축)로 가운데 정렬함

 

 

align-self

교차축 요소를 정렬

- 개별 요소에 적용할 수 있음

inner{
 display: flex;
 align-items: flex-start; 
 /* 제일 앞으로 */
};
inner-box:nth-child(3){
 align-self: flex-end;
 /* 위에 전체적으로 flex-start를 적용했지만 개별로 flex-end 적용 / 제일 밑으로 */
}

예시

 

 

 

flex-wrap

word-wrap와 비슷

- nowrap / 한 줄에 정렬

- wrap / 여러 줄에 걸쳐 정렬

- wrap-reverse / 여러줄에 걸쳐 반대로 정렬

예시

 

 

 

flex-flow

- flex-direction, flex-wrap을 같이 사용가능

row wrap, column wrap 이런식으로 한꺼번에 사용할 수 있다

row-wrap, column-wrap 아니고 하이픈(-) 없어야함

예시

inner{
 display: flex;
 flex-flow: column wrap;
         /* flex-direction | flex-wrap */
}

 

 

 

align-content

justify-content: 와 비슷

 

 

 

참고 

http://flexboxfroggy.com/#ko

 

Flexbox Froggy

A game for learning CSS flexbox

flexboxfroggy.com

 

reduce

const sum = numbers.reduce((a, b) => a + b);
// 주어진 상태를 고쳐나가는 함수(현재 상태를 새로운 상태로 변경할 때 씀)
// [주어진상태].reduce([특정규칙] => 변경된 상태)

 

 

 

useMemo, useCallback은 리액트 렌더링 성능 최적화를 위한 Hook

useMemo

- 특정 결과값을 재사용 할 때 

- 함수형 컴포넌트 내부에서 발생하는 연산을 최적화할 수 있음

- 코드 예시 color, movie의 값이 변경될 때마다 재선언

 

 

useMemo 사용 전

// Info.tsx
import React from "react";

const getColor = (color) => {
    (내용)
};
const getMovie = (movie) => {
    (내용)
}

const Info = ({ color, movie }) => {
  const color = getColor(color);
  const movie = getMovie(movie);
  
  return <div> ~ <div>;
};
// Memo.tsx
import React, { useState } from "react";

const Memo = () => {
  const [color, setColor] = useStete('');
  const [movie, setMovie] = useState('');
  
  const onChange = e => {
    if (e.target.id === "color") setColor(e.target.value);
    else setMovie(e.target.value);
    
    return <div> ~ <div>;
  };

 

 

 

const memoizedValue = useMemo(() => somputeExpensiveValue(a, b), [a, b]);
// const 변수 = useMemo(() => 변수(a, b), [a, b]);

 

useMemo 사용 후

// Info.tsx
import React, { useMemo } from "react";

const getColor = (color) => {
    (내용)
};
const getMovie = (movie) => {
    (내용)
}

const Info = ({ color, movie }) => {
  const color = useMemo(() => getColor(color), [color]);
  const movie = useMemo(() => getMovie(movie), [movie]);
  
  return <div> ~ <div>;
};

 

 

 

useCallback

- useMemo와 비슷한 함수

- 렌더링 성능을 최적화할 때 사용

- 특정 함수를 새로 만들지 않고 재사용하고 싶을 때

- 위에 useMemo는 color, movie의 값이 변경될 때마다 재선언 했지만 Callback은 첫 마운트 될 때 한번만 선언하고 재사용

 

 

 

 

참고

https://leehwarang.github.io/2020/05/02/useMemo&useCallback.html

 

이제는 사용해보자 useMemo & useCallback - 이화랑 블로그

이제는 사용해보자 useMemo & useCallback 이제 useState와 useEffect에 완전히 익숙해졌다고 느꼈는데, 컴포넌트 내에서 저 두 개의 hook 만으로도 props나 state를 다루는 로직에 관련된 기본적인 기능을 모두

leehwarang.github.io

 

 

 

~ 공부중 ~

'개발 > React' 카테고리의 다른 글

[React] input 상태 관리  (0) 2022.05.16
[React] props(Propeties)  (0) 2022.05.12
[React] useEffect  (0) 2022.04.22
[React] e.target.name 계산된 속성명  (0) 2022.04.21

+ Recent posts