[React] 배열에 데이터 삽입 및 배열 렌더링 하기

2022. 1. 9. 18:06·React/활용

0. 학습 들어가기 전

(1) Object.assign 메소드

Object.assign(target, ...sources)
  • 객체를 병합하는 메소드
  • sources 들이 target에 병합되는 형식 (sources = 소스 오브젝트, target = 타겟 오브젝트)
  • 리턴 값은 타겟 오브젝트인 target이 됨
var obj1 = {a};
var obj2 = {b};
var obj3 = {c};
var addObj = Object.assign({}, obj1, obj2, obj3);
console.log(addObj); // {a, b, c}

(2) JSON.stringify 와 JSON.parse()

JSON.stringify(value, replacer, space)
      • JSON : 브라우저와 서버사이에서 오고가는 데이터의 형식
      • JSON.stringify : JSON 객체를 String 객체로 변환해주는 메소드
      • JSON.parse() : String 객체를 JSON 객체로 변환해주는 메소드
      • value (필수) : JSON 문자열로 변환할 값
      • replacer(선택) : null 이거나 값을 쓰지 않을 경우 객체의 모든 속성들이 JSON 문자열 결과에 포함됨
      • space(선택) : 가독성을 목적으로 JSON 문자열 출력에 공백을 삽입하는 데 사용됨 (String이나 number 객체 사용) null 이거나 값을 쓰지 않을 경우 공백이 사용되지 않음
//value의 데이터 타입이 string인 경우

JSON.stringify(7) //7
JSON.stringify(true) //'true'
JSON.stringify(null) //null
JSON.stringify(‘foo’) // “‘foo’”

//value가 배열일 경우

JSON.stringify([1, 'true', true]); // '[1,"true",true]'

 

참고 사이트 : https://steemit.com/kr-dev/@cheonmr/json-stringify

 

JSON.stringify( )란 무엇인가? — Steemit

JSON.stringify( )는 자바스크립트의 값을 JSON 문자열로 변환한다. JSON이란? JSON은 JavaScript Object Notation의 약자로, 브라우저와 서버사이에서 오고가는 데이터의 형식이다. JSON.stringify(value, replacer, space)

steemit.com

(3) 전개연산자와 ES6 구조분해 할당

const a = [1,2,3];
const b = [4,5,6];
const c = [...a, ...b];

console.log(c) // c = [1,2,3,4,5,6]
  • 전개연산자 : 배열 또는 객체들을 연결 또는 합쳐주는 역할을 함
  • ES6 구조분해 할당 참고 사이트 : https://charming-kyu.tistory.com/23
 

[javascript] ES6 구조분해 할당 총 정리

구조분해 (Destructuring assignment) 최근 자바스크립트 함수형 프로그래밍을 공부를 하다 구조분해 및 iterator 개념이 조금 부족하여 따로 정리하여 작성합니다. 이번 게시글에서는 구조분해 만 다루

charming-kyu.tistory.com

(4) map 함수

const a = [1,2,3];

위처럼 a 배열 안의 숫자가 있다

이때 각 숫자들을 두 배씩 해주고 싶으면 map 을 이용해서 쉽게 해결해줄 수 있다

const a = [1,2,3];
const b = a.map (number => number *2);

1. 학습 환경 구축

(1) 컴포넌트 생성

  • PhoneInfo.js : 각 전화번호 정보를 보여주는 컴포넌트
  • PhoneInfoList.js : 여러 개의 PhoneInfo 컴포넌트들을 보여줌

(2) PhoneInfo.js 내용

import React, { Component } from 'react';

class PhoneInfo extends Component {
  static defaultProps = {
    info: {
      name: '이산도',
      phone: '010-0000-0000',
      id: 0
    }
  }
  
  render() {
    const style = {
      border: '1px solid black',
      padding: '8px',
      margin: '8px'
    };

    const {
      name, phone, id
    } = this.props.info;
    
    return (
      <div style={style}>
        <div><b>{name}</b></div>
        <div>{phone}</div>
      </div>
    );
  }
}

export default PhoneInfo;

(3) PhoneInfoList.js 내용

import React, { Component } from 'react';
import PhoneInfo from './PhoneInfo';

class PhoneInfoList extends Component {
  static defaultProps = {
    data: []
  }

  render() {
    const { data } = this.props;
    const list = data.map(
      info => (<PhoneInfo key={info.id} info={info}/>)
    );

    return (
      <div>
        {list}    
      </div>
    );
  }
}

export default PhoneInfoList;

(3) App.js 내용

import React, { Component } from 'react';
import PhoneForm from './components/PhoneForm';
import PhoneInfoList from './components/PhoneInfoList';

class App extends Component {
  id = 2
  state = {
    information: [
      {
        id: 0,
        name: '이산도',
        phone: '010-0000-0000'
      },
      {
        id: 1,
        name: '홍길동',
        phone: '010-0000-0001'
      }
    ]
  }
  handleCreate = (data) => {
    const { information } = this.state;
    this.setState({
      information: information.concat({ id: this.id++, ...data })
    })
  }
  render() {
    return (
      <div>
        <PhoneForm
          onCreate={this.handleCreate}
        />
        <PhoneInfoList data={this.state.information}/>
      </div>
    );
  }
}

export default App;

2. 컴포넌트 내용 설명

* js 에서는 push를 이용하여 배열에 데이터를 삽입할 수 있었으나, React 에서는 사용할 수 없음

 

(1) PhoneInfo.js 설명

style 지정하는 방법은 아래와 같다

// render 함수 안의 내용
const style = {
      border: '1px solid black',
      padding: '8px',
      margin: '8px'
    };
    
// return 값 안의 내용
<div style={style}></div>

info를 props로 받아와서 렌더링을 하는데 이때 defaultProps 를 이용하여 props의 기본 값을 설정합니다

static defaultProps = {
    info: {
      name: '이산도',
      phone: '010-0000-0000',
      id: 0
    }
  }
  
  //render 함수 안의 내용
  
  const {
      name, phone, id
    } = this.props.info;

그리고 return 값을 통해서 배열의 name와 phone의 값이 보여지게 됩니다

return (
      <div style={style}>
        <div><b>{name}</b></div>
        <div>{phone}</div>
      </div>
    );

(2) PhoneInfoList.js 설명

props의 기본 값을 설정해주는 defaultProps을 이용하여 기본 값을 설정합니다

static defaultProps = {
    data: []
  }

data 배열을 map 함수를 통해서 JSX로 변환합니다

key의 값을 info의 id로 설정을 해줍니다

( key를 사용하게 되면 내용이 업데이트가 되었을 때 불변성 유지를 해줄 수 있습니다 )

const { data } = this.props;
    const list = data.map(
      info => (<PhoneInfo key={info.id} info={info}/>)
    );

(3) 실행 결과

기본 값으로 설정해둔 name 과 phone 의 내용이 화면에 보이게 되고

input과 button을 이용하여 내용을 입력해주고 input type를 submit으로 설정하게 되면 아래처럼 배열에 데이터가 삽입되는 것을 확인할 수 있다

'React > 활용' 카테고리의 다른 글

[React] ckeditor 텍스트 에디터 리액트에 적용 (5단계)  (0) 2022.04.13
[React] 리액트에 폰트어썸 매우 쉽게 적용하기 (4단계)  (0) 2022.03.14
[React] input 상태 관리 방법  (0) 2021.12.28
[React] State 사용법 ( + Props 와 비교 )  (0) 2021.12.26
[React] Props 사용법  (0) 2021.12.26
'React/활용' 카테고리의 다른 글
  • [React] ckeditor 텍스트 에디터 리액트에 적용 (5단계)
  • [React] 리액트에 폰트어썸 매우 쉽게 적용하기 (4단계)
  • [React] input 상태 관리 방법
  • [React] State 사용법 ( + Props 와 비교 )
ssddo
ssddo
구경하고 가세요
  • ssddo
    ssddo-story
    ssddo
  • 전체
    오늘
    어제
    • 분류 전체보기 (45)
      • SpringBoot (9)
      • webFlux (2)
      • DB (8)
        • MySQL (3)
        • Mongo (3)
        • Docker (1)
        • Postgres (1)
      • JAVA (1)
      • ORM & DSL (5)
        • JPA (3)
        • JOOQ (2)
      • React (12)
        • 설치 및 환경 구축 (1)
        • 기본 (4)
        • 활용 (7)
      • CS (1)
      • 공통 (6)
      • 프로젝트 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    블록
    RSS
    암호화
    복호화
    mongo
    MySQL
    react
    docker
    패딩
    springboot
    Java
    jooq
    git
    Redisson
    JPA
    postgre
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
ssddo
[React] 배열에 데이터 삽입 및 배열 렌더링 하기
상단으로

티스토리툴바