단순 코드 기록/React

React_조건부 랜더링, useRef

일일일코_장민기 2024. 3. 15. 15:27
728x90

 

import { useState } from "react"

export default function App(){

  const [isEditing, setIsEditing] = useState(true)

  function handleEdit(){
      setIsEditing(() => !isEditing)
  }
 
  let tag1 = (
    <span>홍길동</span>
  )
 
  if(!isEditing){
    tag1 = (
      <input type="text"></input>
    )
  }

  return (
    <div>
      <h1>조건부 랜더링 구현1: if문</h1>
      {tag1}
      <button onClick={handleEdit}>{isEditing ? "save" : "edit"}</button>
     
      <hr></hr>

      <h1>조건부 랜더링 구현2: 3항연산자 이용</h1>
      {isEditing ? <span>이순신</span> : <input></input>}
      <button onClick={handleEdit}>{isEditing ? "save" : "edit"}</button>
     
      <hr></hr>

      <h1>조건부 랜더링 구현3: 3항연산자 이용</h1>
      {isEditing && <span>유관순</span>}{!isEditing && <input></input>}  
      <button onClick={handleEdit}>{isEditing ? "save" : "edit"}</button>
      <hr></hr>

    </div>
  )
}

 

 

 

 

 

 

 

 

 

 

App
import Player from "./components/player"

export default function App(){

  return (
    <>
    <h1>App</h1>
      <Player></Player>
    </>
  )
}
player
import { useState } from "react";

export default function Player(){
    const [enteredPlayerName, setEnteredPlayerName] = useState("")
    const [submitted, setSubmitted] = useState(false);

  function handleChange(event){
    setSubmitted(false);
    setEnteredPlayerName(event.target.value);
  }

  function handleClick(){
    setSubmitted(true);
  }

  console.log("Player: ", enteredPlayerName);

  return (
    <div>
        <section id="player">
          <h2>환영합니다. {submitted ? enteredPlayerName : "unknown entity"}</h2>
            <input type="text" value={enteredPlayerName} onChange={handleChange}></input>
            <button onClick={handleClick}>저장</button>
        </section>
    </div>
  )
}

 

 

 

 

 

 

 

 

useRef(컴포넌트를 직접 참조)
import { useState, useRef } from "react";

export default function Player(){
    //태그 중 ref={playerName}을 참조함
    //state와 달리, 다르게 값을 변경해도 재랜더링되지 않고, current 속성을 사용
    const playerName = useRef();                       //playerName를 참조할 수 있게 만듦
    const [enteredPlayerName, setEnteredPlayerName] = useState(null);

  //버튼을 클릭했을 때만 랜더링
  function handleClick(){
    setEnteredPlayerName(playerName.current.value)    //playerName에 현재 입력된 값을 저장
    playerName.current.value="";                      //playerName을 다시 공란으로 만듦
  }

  return (
    <div>
        <section id="player">
          <h2>환영합니다. {enteredPlayerName ?? "unknown entity"}</h2>  {/* null/undefined면 unknown entity */}
            <input type="text" ref={playerName}></input>
            <button onClick={handleClick}>저장</button>
        </section>
    </div>
  )
}

 

 

'단순 코드 기록 > React' 카테고리의 다른 글

React_자식창을 모달창으로 불러오기  (0) 2024.03.18
React_부모창에서 자식창의 함수 불러오기  (0) 2024.03.15
React_Select 숫자 증감  (0) 2024.03.15
React_자손 테이블  (0) 2024.03.15
React_GameBoard  (0) 2024.03.15