Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
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
Tags
more
Archives
Today
Total
관리 메뉴

ksw_devlog

TIL 6주 3일차 본문

TIL

TIL 6주 3일차

kimcoach 2022. 12. 7. 21:29

JSX 문법 : html도 있고 함수도 같이 씀

html 컴포넌트와 그와 관련된 함수를 뭉쳐서 세트로 만든다 -> 이 세트를 컴포넌트라 한다 -> 리액트는 컴포넌트를 여러개를 만들어서 가져다가 쓴다 -> 코드의 재활용성을 높인다.

 

자동으로 값이 업데이트되면 UI도 업데이트 되는 게 효율적 

변수가 많으면 좋지 않음 -> 변수는 잠깐 저장해주는 값

변수 업데이트 신경X, state 바뀌면 -> UI 렌더링, state가 바뀌면 UI가 업데이트됨

{useState} : 리액트에서 제공하는 유용한 함수 중 하나 -> 리액트 훅

 

function App() {
  let count = 0
  const [count2setCount2] = useState(0)
  const increase = () =>{
    count = count + 1
    setCount2(count2+1)
    console.log("count work?"count)
  }
  return (
    <main>
    <div>{count}</div>
    <div>state:{count2}</div>
    <button onClick={increase}>증가</button>
    </main>
  );
}

export default App;

 

useState(0) // 괄호안에 값 -> 초기값

setCount2(count2+1) => setCount2 = count2 +1 ==> X, 이렇게 표현 X

 

*state값이 업데이트가 되면 변수의 값은 다시 초기화가 됨 -> 변수는 모든 상황에서 X, 잠깐 저장해주는 값

-> state 씀

 


function Nav(props) {
  const lis = [
    <li><a href="/">html</a></li>,
      <li><a href="/">css</a></li>,
      <li><a href="/">javascript</a></li>
  ]
  return <nav>
    <ol>
      {lis}
    </ol>
  </nav>
}

function App() {
  const topics = [
    {id:1title:'html'body:'html is ...'},
    {id:2title:'css'body:'css is ...'},
    {id:3title:'javascript'body:'javascript is ...'}
  ]
  return (
    <div>
      <Header title="WEB"></Header>
      <Nav topics={topics}/>
      <Article title="Welcome" body="Hello, WEB"/>
    </div>
  );
}

topics props를 Nav 컴포넌트에 전달할려면 

1.for 문 -> 쉬운방법

2. map 이용 -> 어려운 방법


function Nav(props) {
  const lis = []
  for(let i=0i<props.topics.lengthi++){
    let t = props.topics[i];
    lis.push(<li key={t.id}>
      <a id={t.id} href={'/read/'+t.id} onClick={event=>{
        event.preventDefault();
        props.onChangeMode(event.target.id);
      }}>{t.title}</a>
      </li>);
  }
  return <nav>
    <ol>
      {lis}
    </ol>
  </nav>
}

function App() {
  const topics = [
    {id:1title:'html'body:'html is ...'},
    {id:2title:'css'body:'css is ...'},
    {id:3title:'javascript'body:'javascript is ...'}
  ]
  return (
    <div>
      <Header title="WEB" onChangeMode{()=>{
        alert('Header');
      }}></Header>
      <Nav topics={topics} onChangeMode={(id)=>{
        alert(id);
      }}/>
      <Article title="Welcome" body="Hello, WEB"/>
    </div>
  );
}

props.onChangeMode(event.target.id) // 바로 위에 있는 a태그의 id값을 나타냄

 

 

 


Prop(입력) -> state -> return

 

prop은 컴포넌트를 사용하는 외부자를 위한 데이터

state는 컴포넌트를 만드는 내부자를 위한 데이터

 

let content = null;
  if(mode === 'WELCOME'){
    content = <Article title="Welcome" body="Hello, WEB"/>
  } else if(mode === 'READ') {
    content = <Article title="Read" body="Hello, Read"/>
  }
  return (
    <div>
      <Header title="WEB" onChangeMode{()=>{
        setMode('WELCOME');
      }}></Header>
      <Nav topics={topics} onChangeMode={(id)=>{
        setMode('READ');
      }}/>
      {content}
    </div>
  );

 

값을 바꿀거면 set~ 로 : setMode('WELCOME')  // mode = 'WELCOME' (X)

 

 

 

 

 

'TIL' 카테고리의 다른 글

TIL 6주 5일차  (1) 2022.12.09
TIL 6주 4일차  (0) 2022.12.08
TIL 6주 2일차  (1) 2022.12.06
TIL 6주 1일차  (0) 2022.12.05
WIL 5주차  (0) 2022.12.04