Frontend/React

[React] onclick

seong's log 2024. 3. 13. 21:18

아래 teminal 창에 warning 없애기 : js 맨 상단에 /* eslint-disable */  작성 or 필요 없는 import 지우기

state 변경 : {}안에서 하면 안됨

/* eslint-disable */

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

function App() {

  // 방법 1 : 각각 변수로 저장 
  let [list1,funcList1] = useState('남자 코트 추천');
  let [list2,funcList2] = useState('강남 우동맛집'); 
  let [list3,funcList3] = useState('파이썬독학'); 
  let [date, funcDate] = useState('2월 17일 발행');

  // 방법 2 : list 로 저장
  let [listArr,funcArr] = useState(['남자 코트 추천','강남 우동맛집','파이썬독학']);
  let [like, plusLike] = useState(0); 
  // 함수를 사용하지 않을 시 변수명만 만들어도 됨
  // state 변경 시 함수 부분 생략하지 않아야 html 재렌더링 잘됨

  function calcLike(){
    console.log(1)
  }

  return (
    
    <div className="App">
      <div className='black-nav'>
        <h4>ReactBLOG</h4>
       </div>
        <div className='list'>
        <h4>{ listArr[0] } <span onClick={() => { plusLike(like+1) }}>👍🏻</span> {like} </h4> 
          {/* state 변경함수( 변경할 내용 입력 )  */}
          {/* <h4>{ listArr[0] } <span onClick={calcLike}>👍🏻</span> {like} </h4>  */}
          {/* onlick 내에는 함수/람다식 만 사용 가능 
            ex) onClick = function(){console.log(1)} , 
                onClick = () => {console.log(1)}
          */}
          <p>{ date }</p>
        </div>
        <div className='list'>
          <h4>{ list2 }</h4>
          <p>{ date }</p>
        </div>
        <div className='list'>
          <h4>{ list3 }</h4>
          <p>{ date }</p>
        </div>
    </div>
  );
}

export default App;

 

연습 : 버튼 click 시 첫 글 제목이 '여자 코트 추천'으로 변경 되는 버튼 만들기

state 변경 함수 특징 

기존 state == 신규 state ---> 변경 안해줌

 

array/object 특징

array/object 담은 변수엔 값이 어디있는지 알려주는 화살표만 저장됨

글제목[0]='여자코트 추천'; 으로 변경시 값은 바뀌지만 화살표는 변경되지 않음 => 같은 state로 인식

copy를 하더라도 값이 아니라 화살표만 copy 되어 같은 state로 인식 => state 변경되어 출력되지 않음

console.log(copy == 글제목) =true로 출력됨

copy 시 let copy = [...글제목]; 으로 복사해야함 (shallow copy 해야함)

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

function App() {
  let [title, changeTitle] = useState(['남자코트 추천', '강남 맛집 추천', '국내 여행지 추천'])
  let [date, changeDate] = useState('2월 17일 발행')
  let [cnt, plusCnt] = useState(0)

  return (
    <div className="App">
      <div className='black-nav'>
        <h4>ReactBlog</h4>
      </div>
      <div className='list'>
        <h3>{title[0]}<span onClick={()=>{plusCnt(cnt+1)}}> ♥</span> {cnt}</h3>
        <p>{date}</p>
      </div>
      <div className='list'>
        <h3>{title[1]}</h3>
        <p>{date}</p>
      </div>
      <div className='list'>
        <h3>{title[2]}</h3>
        <p>{date}</p>
      </div>
      <button onClick={()=>{
        let copy = [...title]
        copy[0] = '여자코트 추천'
        changeTitle(copy)
      }}>변경</button>
      <button onClick={()=>{
        let copy = [...title]
        copy.sort()
        changeTitle(copy)
      }}>가나다순 정렬</button>
    </div>
  );
}

export default App;
.black-nav{
  display: flex;
  background-color: black;
  color: white;
  padding-left: 20px;
  text-align: left;
  width: 100%;
}
.list{
  padding-left: 20px;
  text-align: left;
  border-bottom: 1px solid grey;
}