생활코딩! React 리액트 프로그래밍

egoing - React - props - array

lshjju 2025. 6. 21. 22:52

펑션네브에 어레이데이터 전달 합니다.


단순한 데이터만 바인딩 할 수 있다면 재미 없습니다.

어레이도 바인딩할 수 있어야 합니다.

어레이 데이터 바인딩을 실습해 봅니다.

그러려면 약간의 콘트롤 스테이트먼트가 필요합니다.

또한, 어레이이므로 데이터 각각의 고유한 아이덴티티도 필요할것입니다.


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

 

Completion


  const topics = [
    {id:1, title:'html', body:'html is ...'},
    {id:2, title:'css', body:'css is ...'},
    {id:3, title:'javascript', body:'javascript is ...'}
  ]

 

JS 의 array 를 사용해서 데이터를 담아봅니다.

텍스트 데이터를 배리어블에 어레이로 담아 둡니다.


<Nav topics={topics}></Nav>

 

네브 태그에 배리어블을 전송합니다.



네비게이션 유아이 빌딩 합니다.


function Nav(props) {
  const lis = [];
  for (let i = 0; i < props.topics.length; i++) {
    let t = props.topics[i];
    lis.push(
      <li key={t.id}>
        <a href={"/read/" + t.id}>{t.title}</a>
      </li>
    );
  }
  return (
    <nav>
      <ol>{lis}</ol>
    </nav>
  );
}

 

Completion


function Nav(props) {
  const lis = []
  for(let i=0; i<props.topics.length; i++) {
    let t = props.topics[i];
    lis.push(<li>{t.title}</li>);
  }
  return (
    <nav>
      <ol>
        {lis}
      </ol>
    </nav>
  )
}

 

파라미터로 프롭스를 사용합니다.

배리어블을 세팅합니다.

반복문을 돌려서 배리어블의 모든 데이터를 불러내서 푸시합니다.


    lis.push(<li><a href={'/read/'+t.id}>{t.title}</a></li>);

 

푸시한 데이터에 링크 문자열을 추가합니다.

F12 콘솔 체크

key prop 에러 메시지가 뜹니다.


    lis.push(<li key={t.id}><a href={'/read/'+t.id}>{t.title}</a></li>);

 

에러 내용은 li 태그는 자기만의 고유한 프롭스를 가져야 한다는 뜻입니다.

즉, li 태그 하나하나에 키값을 주라는 뜻입니다.

이 반복문 안에서만 유효한 t.id 를 사용해서 키값을 설정하겠습니다.

F12 콘솔 체크

에러가 사라졌습니다.

표현식은 정해진대로 하면 되는거니까 논리적으로 파헤칠 필요 없이 그대로 따르면 됩니다.


    <nav>
      <ol>
        {lis}
      </ol>
    </nav>

 

lis 데이터바인딩 합니다.


test

 

1 2 3 탭합니다.

/read/3

유알엘이 이렇게 생성되는지 체크 합니다.



completion

import "./styles.css";

function Header(props) {
  console.log("props", props.title);
  return (
    <header>
      <h1>
        <a href="/">{props.title}</a>
      </h1>
    </header>
  );
}

function Nav(props) {
  const lis = [];
  for (let i = 0; i < props.topics.length; i++) {
    let t = props.topics[i];
    lis.push(
      <li key={t.id}>
        <a href={"/read/" + t.id}>{t.title}</a>
      </li>
    );
  }
  return (
    <nav>
      <ol>{lis}</ol>
    </nav>
  );
}

function Article(props) {
  return (
    <article>
      <h2>{props.title}</h2>
      {props.body}
    </article>
  );
}

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

 


'생활코딩! React 리액트 프로그래밍' 카테고리의 다른 글

egoing - React - state  (0) 2025.06.23
egoing - React - event  (0) 2025.06.21
egoing - React - props  (0) 2025.06.21
egoing - React - component  (0) 2025.06.20
egoing - React - Directory scan  (1) 2025.06.20