nomad code_react js로 영화앱 만들기_#2.3, #2.5, #2.6

2022. 10. 5. 13:54react

React js hard cording_2

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

<script crossorigin src="https://unpkg.com/react@18/umd/react.production.min.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@18/umd/react-dom.production.min.js"></script>
<script>
  const root = document.getElementById("root");
  const span = React.createElement(
    "h3", 
    {
      id: "title",
      onMouseEnter: () => console.log("mouse enter")
    },
    "Hello I`m a span"
    );
  const btn = React.createElement(
    "button", 
    {
      onClick: () => console.log("I`m clicked."),
      style: {
        backgroundColor: "tomato",
      }
    }, 
    "Click me"
    );
  const container = React.createElement("div", null, [span, btn]);
  ReactDOM.render(container, root);
</script>

React.Element로 HTML태그, 속성, event, 내용 등을 컨트롤 할 수 있음

html에 자식 태그를 삽입할 시, 배열 " [] "에 넣으면 생성할 수 있다

 

 

React j _ JSX(babel)

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

<script src="https://unpkg.com/react@18/umd/react.production.min.js"></script>
<script src="https://unpkg.com/react-dom@18/umd/react-dom.production.min.js"></script>
// JSX를 읽을 수 있게 해주는 cdn
<script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
<script type="text/babel">
  const root = document.getElementById("root");

  // JSX : JS를 확장한 문법. HTML 구조와 비슷하게 사용 가능
  const Title = (
    <h3 id="title" onMouseEnter={() => console.log("mouse enter")}>
      Hello I`m a span
    </h3>
    );
  
  const button = (
    <button
      style={{
        backgroundColor: "tomato",
      }} 
      onClick={() => console.log("I`m clicked.")}
    >
      Click me
    </button>
  );
  
  const container = React.createElement("div", null, [Title, button]);
  ReactDOM.render(container, root);
</script>

JSX는 HTML구조와 비슷하게 사용이 가능하며 babel을 통해 컴퓨터가 JS로 읽을 수 있게 하면 된다.

위와 결과물은 동일하게 출력된다.

 

 

React j _ JSX(babel)_2

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

<script src="https://unpkg.com/react@18/umd/react.production.min.js"></script>
<script src="https://unpkg.com/react-dom@18/umd/react-dom.production.min.js"></script>
<script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
<script type="text/babel">
  const root = document.getElementById("root");
  // 일반 함수
  function Title(){
    return(
      <h3 id="title" onMouseEnter={() => console.log("mouse enter")}>
        Hello I`m a span
      </h3>
    );
  }
  // 화살표 함수
  const Button = () => (
    <button
      style={{
        backgroundColor: "tomato",
      }} 
      onClick={() => console.log("I`m clicked.")}
    >
      Click me
    </button>
  );
  
  const Container = () => (
    <div>
      <Title />
      <Button />
    </div>
  );
  
  ReactDOM.render(<Container />, root);
</script>

각각의 컴포넌트(Title, Button)를 함수의 형태로 만들고 컴포넌트를 합치는 컨테이너 또한 함수의 형태로 만든다.

단, 모든 컴포넌트의 첫 글자는 대문자이여야 한다. 소문자로 작성할 시 리액트와 JSX는 HTML태그로 인식한다.

 

 

<결과물>

 

 

 

babel test page

https://babeljs.io/repl#?browsers=defaults%2C%20not%20ie%2011%2C%20not%20ie_mob%2011&build=&builtIns=false&corejs=3.21&spec=false&loose=false&code_lz=MYewdgzgLgBAKgSygGwKYwLwwBQCgYEwA8AFgMwwIAmGARFEmrTOALIgCuEqAomFKgBOGAN7YAlJgB8MUJBBoAdMhABzbLQC2nbjFT8htcQF8p-QgQASqZCpgBJAAaaYAQxgQADq7DmCRAHpyMwtxAG5zczloGAAjDigocEwcP2J4xPA0gmgATzRREWzCWNdgAGtVQU4wKgBhBRBBAC4YehBNVyTaABpi42MYYvA65AQK0QlpWXAIBVRlNQ0nF2AxitQqRSNjNJCLGFHx8phNVDTAjKSwffCgA&debug=false&forceAllTransforms=false&shippedProposals=false&circleciRepo=&evaluate=false&fileSize=false&timeTravel=false&sourceType=module&lineWrap=true&presets=env%2Creact%2Cstage-2&prettier=false&targets=&version=7.19.3&externalPlugins=&assumptions=%7B%7D