티스토리 뷰

Project 댕린이집

React 연습

xoo | 수진 2024. 1. 6. 23:29

component, probs, state 등을 적절히 사용하여 추가' 버튼을 누르면 인풋창에 입력한 값이 저장되어 나타나도록 구현해봤습니다. 아주아주 간단하지만 개념들을 익숙해지게 하기 위해 연습해본 과정을 기록해봅니다!

 


 

 

1️⃣ 인풋창과 버튼 생성

import './App.css'

export default function App() {
  return (
    <main>
      <input type="text"/>
        <button>추가</button>
    </main>
  )
}

 

먼저 App.js에 인풋창과 버튼을 생성해줍니다.

 


 

 

2️⃣ 인풋창에 입력한 값을 가져오기

  • onChange 이벤트 : input창에 값을 입력할 때 마다 호출되는 onChange 이벤트
  • (event) 안에 input에 입력한 값이 들어있습니다 ⇒ 확인해보려면 console.log(event.target.value) ⇒ input에 값을 칠 때 마다 프린트 됩니다.

 

  • 값을 저장해야 합니다. ⇒ state 사용
    • import 추가
import React, {useState} from 'react';

 

  • App() 함수 안에 코드 추가
const [inputValue, setInputValue] = useState('');

 

  • input태그의 value가 inputValue가 되도록 코드 추가
<input value = {inputValue} />

 

  • onChange 안에 inputValue state에 값을 넣어준다.
    setInputValue() 사용해서 값을 매번 업데이트 해준다.
<input value={inputValue} type="text" onChange={(event) => setInputValue(event.target.value)} />

 

 


 

3️⃣ 버튼을 클릭하면 호출할 함수 만들기

  • 버튼 이벤트 주기 ⇒ onClick
<button onClick={addItem}>추가</button>

 

  • 이제 addItem 함수를 만들어줍니다.
const addItem = () => {
    
  }

 

  • 아이템을 추가해줘야 합니다. → 어디에? 추가한 아이템을 모아둘 리스트가 필요합니다. → 배열 사용
const [addList, setAddList] = useState([]);

 

  • addItem 함수 내용 작성
    • setAddList를 업데이트할건데
    • 기존에 있는 아이템을 유지하고 ⇒ [...addList]
    • 그 뒤에 새로운 inputValue를 넣어주세요 ⇒ [...addList, inputValue]
const addItem = () => {
    setAddList([...addList, inputValue]);
  };

 

 

 


 

 

4️⃣ Board 컴포넌트 만들기 ( 반복되는 부분 )

이 아이템 리스트를 어디서 보여줄건데?   ⇒   컴포넌트 생성

 

src 안에 components 폴더를 만들고, 그 안에 Board.js 파일을 생성합니다.

 

  • import 해주기
import React from 'react';

 

  • export 해주기 ( 수출시키기 )
export default Board;

 

  • App.js에서 Board 컴포넌트를 갖다 써야합니다. → 리턴문 안에 <Board/> 작성
<Board/>

 

  • Board를 import ( 수입해주자 )
import Board from "./components/Board";

 

 


 

 

 5️⃣ Item 컴포넌트 만들기

Board.js와 마찬가지로 Item.js도 생성해줍니다.

  • import 해주기
import React from 'react';

 

  • export 해주기 ( 수출시키기 )
export default Item;

 

  • Board 안에 Item 추가해주기 → 리턴문 안에 <Item/> 작성
function Board() {
  return (
    <div>
      <h1>Board</h1>
      <Item/>
    </div>
  );
}

 

 


 

 

6️⃣ props

todoList의 아이템을 보여주려면 어떻게 해야할까?

App이 가지고 있는 addList를 어떻게 Board에 전달할까?

바로 props를 쓴다!

  • App.js에서 <Board addList={addList}/> 를 추가
<Board addList={addList}/>

 

  • 그럼 Board.js에서 props를 받아올 수 있게 된다.
    function Board(props) → 매개변수에 props를 추가
    이 props 안에는 addList가 있을 것이다. → 확인하려면 console.log("Board", props.addList)
function Board(props) { }

 

  • 이제 화면에 보여주자.
    HTML에서 JS를 쓰려면 어떻게 해야하지? ⇒ 무조건 {} 를 열고 시작
    addList에 있는 항목들을 하나하나 가져와야함 ⇒ map() 배열 함수를 써준다.
{props.addList.map((item)=><Item item={item}/>)}

 

  • Item.js 에서도 props 추가
function Item(props) {
  return(
    <div>
      {props.item}
    </div>
    )
}

 

 

 


 

 

💻 결과

 

💻 최종 코드

App.js

import './App.css';
import {useEffect, useState} from 'react';
import Board from './component/Board';

function App() {
	let [inputValue, setInputValue] = useState('');
	let [addList, setAddList] = useState([]);
	let addItem=()=>{
	  setAddList(
	   [...addList, inputValue])
	 };

return (
  <div className="App">
		<input type='text' value={inputValue} onChange={(event) => setInputValue(event.target.value)}/>
      <button onClick={addItem}>추가</button>
      <Board addList={addList}/>
  </div>
 );
}

export default App;

 

 

Board.js

import React from "react";
import Item from "./Item";

function Board(props){
    return(
    <div>
        {props.addList.map((item)=><Item item={item}/>)}
    </div>
  )
}

export default Board;

 

 

Item.js

import React from "react";

function Item(props){
    return(
        <div>
            {props.item}
        </div>
    )
}

export default Item;

'Project 댕린이집' 카테고리의 다른 글

CORS 트러블슈팅  (0) 2024.01.12
Axios  (0) 2024.01.11
React의 state를 알아보자  (0) 2024.01.05
JSX 문법  (1) 2024.01.03
React의 Props를 알아보자  (0) 2024.01.02
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함