자바스크립트 배열 CRUD  (map, filter, slice, concat, spread연산자)

 

 

스프레드(전개)연산 ...
추가하기 concat
삭제하기(걸러내기) filter 
잘라내기 slice
반복하기 map (배열 전체복사)
수정하기 ...연산 응용

 

 

 

 

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
 <script>
  // concat, filter, map, slice, 스프레드(전개) 연산자
  
  console.log("1. =============== 스프레드 연산자");
  const a = [1,2,3];
  const b = [...a];
  b.push(4); // b의 데이터 변경
  console.log(`a의 값은 : ${a}`); // 1,2,3
  console.log(`b의 값은 : ${b}`); // 1,2,3,4

  console.log("2. =============== 추가하기");
  const a2 = [1,2,3];
  const b2 = a2.concat(4);
  console.log(`a2의 값은 : ${a2}`); // 1,2,3
  console.log(`b2의 값은 : ${b2}`); // 1,2,3,4
  const c2 = [0, ...a2, 4];
  console.log(`c2의 값은 : ${c2}`); // 0,1,2,3,4

  console.log("3. =============== 걸러내기"); // 삭제하기
  const a3 = [1,2,3];
  const b3 = a3.filter((n)=> { return n !=1}); // bool을 return 받는다. -> true만 걸러낸다.
  console.log(`b3의 값은 : ${b3}`); // 2,3

  console.log("4. =============== 잘라내기");
  const a4 = [1,2,3];
  const b4 = a4.slice(0,2);
  console.log(b4); // [1,2]
  const c4 = [...a4.slice(0,2), 4, ...a4.slice(2,3)];
  console.log(c4); // [1,2,4,3]

  console.log("5. =============== 반복하기");
  const a5 = [1,2,3];
  //for(let i=0; i<a5.length; i++){
  //  console.log(a5[i]);
  //}
  // a5.forEach((n) => {console.log(n);}); // 리턴 못함.
  const b5 = a5.map((n) => n+10);  // const b5 = [...a5];
  console.log(b5);

const data = {phone:"2222"};
  const a6 = { id:1, name:"홍길동", phone:"1111", age:17, gender:"남"};
  const b6 = { ...a6, ...data}; //기존 데이터에 덮어씌움
  console.log(b6);


  const users = [
    {id:1, name:"구태모", phone:"2222"},
    {id:2, name:"이대엽", phone:"3333"},
    {id:3, name:"오승훈", phone:"4444"}
  ];

  const updateUserDto = {
    id:2, name:"홍길동"
  };

  const newUsers = users.
    map(user => user.id === updateUserDto.id ? {...user, ...updateUserDto} :user); // const newUser = {...users};
  
  console.log("newUsers", newUsers);
 </script>
</body>
</html>

결과 ( 깊은복사 )

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

 

import { useState } from 'react';
import './App.css';

function App() {
  // 다운로드 받음
  const [users, setUsers] = useState([
    { id: 1, name: '홍길동' },
    { id: 2, name: '임꺽정' },
    { id: 3, name: '장보고' },
    { id: 4, name: '코스' },
  ]);

  const download = () => {
    let sample = [
      { id: 1, name: '홍길동' },
      { id: 2, name: '임꺽정' },
      { id: 3, name: '장보고' },
      { id: 4, name: '코스' },
    ];

    setUsers([...sample]);
  };

  // 랜더링 시점 = 상태값 변경
  return (
    <div>
      <button onClick={download}>다운로드</button>
      {users.map((u) => (
        <h1>
          {u.id}, {u.name}
        </h1>
      ))}
    </div>
  );
}

export default App;

 

 

리엑트의 렌더링 시점 = 상태값 변경시점.
일반 변수를 상태 변수로 바꾸는법

React의 hooks 라이브러리를 사용함.
const [요소, set요소] = useState( );

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

상태변수 이기때문에 원래있던 값에 변경된 값을 덮어씌우는 형식이다.

조금 더 다듬어서 저장하겠습니다.

npm start 명령어를 실행하면

프로젝트 내부에있는 index.js 가 실행된다. 그속에는

ReactDOM.render(
  <React.StrictMode>
    <App />
  </React.StrictMode>,
  document.getElementById('root')
)

라는 render 함수가 있고, 중간에있는 App 은 [컨트롤 + 클릭] 해보면 App.js를 가리키는 문법입니다.

 

  document.getElementById('root') 는 프로젝트 폴더가 만들어질때 같이 만들어진 public 이라는 폴더를 보시면

 

index.html 이라는 파일에서 root라는 id의 태그를 찾겠다는 뜻입니다.

index.html 생긴거보면 주석빼면 걍 아무것도없는 파일입니다

index.js의 최종 목적은 저 사이에 App.js 가 return 하고있는 코드를 집어넣겠다는 뜻입니다.

 

그렇기에 JS파일(App.js)에 HTML 문법을 써넣는 기술이 필요하고 그것을 JSX 문법이라고 합니다. 

 

 

옛날 리액트는 클래스 컴포넌트 방식을 사용했지만, 요즘은 함수형 컴포넌트 방식(Hooks)를 더 많이 사용합니다.

앞으로 사용하는 컴포넌트들은 모두 함수형 컴포넌트 방식을 사용할것입니다.

 

JSX 기본 문법

1. return은 하나의 태그만 가능하다.

2. 자바스크립트의 변수를 HTML 코드안에서 사용하려면 { } 중괄호 문법을 사용해야한다.

3. if문은 사용할 수 없고 삼항연산자를 사용해야한다. ( 조건 ?  참 실행문 : 거짓 실행문 )

4. 조건부 렌더링이 가능하다.(if문 처럼생김) ( 조건 && 참 실행문 )

 

 

React(리액트) 란 프론트엔드 개발 기술로,

브라우저에 변경된 데이터를 감지하여 그림을 그리는데 최적화 된 기술입니다.

 

 

리액트를 실습해 보기 위해서는 '변경 감지'를 무자비하게 인식해줄 '서버'가 필요합니다.

요청을 하면 응답을 해주는것 = 서버

 

 

node.js 서버를 사용하겠습니다.

nodejs.org/ko/

 

Node.js

Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.

nodejs.org

작성시간 기준으로 LTS 버전이 14.15.4 버전이네요.

최신버전 보다는 LTS로 다운받아주세요

 

 

프론트엔드는 MS Visual Code 를 사용할겁니다.

백엔드는 나중에 Spring으로 사용할 예정이지만 지금은 필요없습니다.

 

 

원하는 경로에 프로젝트용 새 폴더를 만들고 MS Code 에서 Add WorkSpace 를 합니다

 

 

create-react-app.dev/docs/getting-started/

 

Getting Started | Create React App

Create React App is an officially supported way to create single-page React

create-react-app.dev

새 터미널을 여시고 (저는 cmd를 사용했습니다. 탭에 Terminal)

npx create-react-app my-app
cd my-app
npm start

my-app 이라는 이름으로 프로젝트를 만드는 명령어입니다.

npm start는 서버를 실행하는거구요

 

 

예상경로 :   C:\workspace\my-app> npm start

성공하셨다면 리액트로고가 빙글빙글 돌아가는 화면이 나올겁니다~ 

 

 

 

다음은 리액트 사용에 편리한 확장프로그램들 입니다

ESLint 는 리액트 문법을 검사해주는 프로그램이고,

자바스크립트는 인터프리터 언어이기때문에 실행 전까지는 오류를 알 수가 없습니다.

 

Reactjs code snippets 는 리액트에서 자주쓰이는 문법들을 자동완성 시켜주는 프로그램입니다.

 

 

 

 

 

 

 

+ Recent posts