ReactDOM.render(), component 만들어서 render해주기

Juyeon Lee·2022년 4월 11일
0

REACT 리액트

목록 보기
5/65

index.html

<html>
  <head>
    <link rel="stylesheet" href="index.css" />
    <script
      crossorigin
      src="https://unpkg.com/react@17/umd/react.development.js"
    ></script>
    <script
      crossorigin
      src="https://unpkg.com/react-dom@17/umd/react-dom.development.js"
    ></script>
    <script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script>
  </head>
  <body>
    <div id="root"></div>
    <script src="index.js" type="text/babel"></script>
  </body>
</html>

index.html에서

  <div id="root"></div>

이 부분은 한마디로 컨테이너라고 생각하면 됨.
리액트에서 여기에 글을 넣어주고 하기 위해서는

index.js에

ReactDom.render(<h1>Hello, everyone!</h1>, document.getElementById("root"));

이렇게 ReactDom.render()로 처음에는 넣어줄 content를 써주고
그 다음에 들어갈 컨테이너를 getElementById("")로 지정해주면 되었다.

ul로 리스트 두개 작성하는것도 연습해보았는데
아주 간단하게

ReactDOM.render(
    <ul><li>Thing 1</li><li>Thing 2</li></ul>,
    document.getElementById("root")
)

이렇게 해주면 됨

다음으로 component만들어서 render해주는걸 보자

index.js

function Navbar() {
    return (
        <nav className="navbar navbar-expand-lg navbar-light bg-light">
            <a className="navbar-brand" href="#">Navbar</a>
            <button className="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
                <span className="navbar-toggler-icon"></span>
            </button>

            <div className="collapse navbar-collapse" id="navbarSupportedContent">
                <ul className="navbar-nav mr-auto">
                <li className="nav-item active">
                    <a className="nav-link" href="#">Home <span className="sr-only">(current)</span></a>
                </li>
                <li className="nav-item">
                    <a className="nav-link" href="#">Link</a>
                </li>
                <li className="nav-item dropdown">
                    <a className="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
                    Dropdown
                    </a>
                    <div className="dropdown-menu" aria-labelledby="navbarDropdown">
                    <a className="dropdown-item" href="#">Action</a>
                    <a className="dropdown-item" href="#">Another action</a>
                    <div className="dropdown-divider"></div>
                    <a className="dropdown-item" href="#">Something else here</a>
                    </div>
                </li>
                <li className="nav-item">
                    <a className="nav-link disabled" href="#">Disabled</a>
                </li>
                </ul>
                <form className="form-inline my-2 my-lg-0">
                    <input className="form-control mr-sm-2" type="search" placeholder="Search" aria-label="Search" />
                    <button className="btn btn-outline-success my-2 my-sm-0" type="submit">Search</button>
                </form>
            </div>
        </nav>
    )
}

// Challenge: Create your own custom React component!
// Call it "MainContent", and have it return a simple
// h1 element that says "I'm learning React!"

// Afterward, render it below the Navbar (which
// you can do inside the ReactDOM.render call below)

function MainContent() {
    return (
        <h1>I'm learning React!</h1>
    )
}

ReactDOM.render(
    <div>
        <Navbar />
        <MainContent />
    </div>,
    document.getElementById("root")
)

MainContent라는 react component를 만들어줬고
h1으로 return해줬다
그리고 그걸 render하는곳에 navbar 다음에 render해줬음..

아까 react로 간단하게 render하는

ReactDOM.render(<h1 className="header">Hello, React!</h1>, document.getElementById("root"))

이거 대신 바닐라자바스크립트를 이용하게 되면

- Create a new h1 element
- Give it some textContent
- Give it a class name of "header"
- append it as a child of the div#root
    
*/

const h1 = document.createElement("h1")
h1.textContent = "This is an imperative way to program"
h1.className = "header"
document.getElementById("root").append(h1)

이렇게 훨씬 복잡하게 된다.. 이럴때는 일일히 뭘 해야하는지
프로그램한테 알려주게 되는데 이런애들을 imperative라고 한다..
프로그램이 알아서 하는건 declarative라고 하는데
react가 바로 declarative 하기 때문에 인기가 좋다고 함.

0개의 댓글