[React] 컴포넌트

2022. 6. 20. 15:56·Stack/React

* 컴포넌트 -> 함수형 컴포넌트, 클래스형 컴포넌트

function 이름 () {

                return <>;

}

const 이름 = () => {

                return <>;

}

class 이름 extends Component {

                render() {

                                return()

                }

}

 

* props -> properties를 줄인 표현, 컴포넌트 속성

자식 컴포넌트를 사용하는 부모 컴포넌트에서 설정해서 자식 컴포넌트에게 전달

 

const App = () => {

                return

                <div>

                                <MyComponent name ="green" age="20">

                                              <h3>하하하하하</h3> 

                                </MyComponent>

                </div>

}

 

cosnt MyComponent = (props) => {

        const name = props.name

        const age = props.age;

        const { name, age } = props;

              return

}

 

cosnt MyComponent = ({ name, age, children }) => {

              return <div>

                            제 이름은 {name}입니다.

                            제 나이는 {age}입니다.

                            {children}

              </div>

}

MyComponent.defaultProps = {

              name: '기본이름',

              age: '20',

}

import PropTypes from 'prop-types';

MyComponent.propType = {

              name: PropType.string

}

class Mycomponent extends Component {

              const { name, age, children } = this.props;

              render(

                            return()

              )

}

 

* state 컴포넌트 내부에서 바뀔 수 있는 값 -> state가 변경되면 화면을 다시 그림

-> state가 변경되면 화면을 다시 그림

import { useState } from 'react';

const MyComState = () => {

              const [countNum, setCountNum] = useState(0);

              ❌ countNum = 20;   // 이케 바로 수정 불가능

              setCountNum(20)   // setCountNum이라는 함수를 통해 countNum에 접근

}

 

함수형 컴포넌트

useState import

const [state, setState] = useState(초기값);

 

class형 컴포넌트

state 접근 this.state

state 변경 this.setState({})

 

class MyComState extends Component {

              constructor(){      // 첫번째 방법

                            this.state = {

                                        countNum: 0,

                            }

              }

                           or

              state = {              // 두번째 방법

                            countNum: 0

              }

 

              render() {

              const { countNum } = this.state;

                            return (

                                          <div>

                                                        <h1>{countNum}</h1>

                                                        <button onClick={()=>{

                                                                      this.setState({countNum: countNum+1})

                                                        }}

                                                                      >+1</button>

                                          </div>

                            )

              }

}

 

 

 

-------- 복습 --------

2022.05.23 - [Coding/JavaScript] - [JS] 구조분해 할당

 

[JS] 구조분해 할당

구조 분해 할당 (React에서 많이 쓰임) 배열과 객체의 값을 분해해서 변수에 할당해줌 배열의 값을 복사한 후 변수에 할당해주므로 배열이 수정 또는 파괴되지 않습니다. let fruits = ["사과", "수박",

7ingout.tistory.com

 ----------------

 

 

 

index.js

import React from 'react';
import ReactDOM from 'react-dom/client';
import './index.css';
import App from './App';
import reportWebVitals from './reportWebVitals';

const root = ReactDOM.createRoot(document.getElementById('root'));
// 컴포넌트를 페이지에 랜더링을 해줌

root.render(
  <React.StrictMode>
    <App />
  </React.StrictMode>
);

// If you want to start measuring performance in your app, pass a function
// to log results (for example: reportWebVitals(console.log))
// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
reportWebVitals();

 

App.js

// import logo from './logo.svg';
import './App.css';
import React from 'react';
import CounterF from './CounterF';
// import Counter from './Counter';
// import MyComponent from './MyComponent';
// import MyComponentClass from './MyComponentClass';

function App() {
  // const name = "리액트";
  return (
    // JSX에서 자바스크립트 표현식을 사용하려면 {}로 감싼다.
    // if문 대신 조건부연산자 - 삼항연산자를 사용 
    <div className='react'>
      <CounterF></CounterF>

      {/* <Counter></Counter> */}

      {/* <MyComponentClass name="classGreen" age={30}>
        <h3>children</h3>
      </MyComponentClass>
      <MyComponentClass></MyComponentClass> */}

      {/* <MyComponent name='Green' age='30'/><h3>여러분</h3><MyComponent/>
      <MyComponent name='Blue' age={50}/><h3>새과목</h3><MyComponent/>
      <MyComponent/><h3>하하하</h3><MyComponent/> */}

      {/* <h1>{name == '리액트' ? (<span>리액트입니다.</span>) : (<span>리액트가 아닙니다.</span>) } 안녕!</h1> */}
      {/* <h2>하이하이</h2>
      <input type="text"></input> */}
    </div>
  );
  // return React.createElement("div", null, "Hello", React.createElement("b", null, "react"));
}

export default App;

 

MyComponent.js

// const MyComponent = () => {
//     return <div>새로운 컴포넌트 생성</div>
// }

// function MyComponent() {
//     return <div>새로운 컴포넌트 생성</div>;
// }
// export default MyComponent;
import React from 'react';

// rsc
const MyComponent = ({name, age, children}) => {
    // const {name, age, children} = props;
    return (
        <div>
            안녕하세요 제 이름은 {name}입니다.<br/>
            제 나이는 {age}입니다.<br/>
            {children}
        </div>
    );
};
// const MyComponent = (props) => {
//     const { name, age } = props;
//     return (
//         <div>
//             안녕하세요 제 이름은 {props.name}입니다.<br/>
//             제 나이는 {props.age}입니다.
//         </div>
//     );
// };

// props 기본값 설정
MyComponent.defaultProps = {
    name: "기본이름",
    age: 1,
};
export default MyComponent;

 

MyComponentClass.js

import { Component } from "react";

class MyComponentClass extends Component {
    render() {
        const { name, age, children } = this.props;
        return (
            <div>
                제이름은 {name}입니다.
                나이는 {age}입니다.
                {children}
            </div>
        );
    };
}
MyComponentClass.defaultProps ={
    name: '기본이름',
    age: 20,
    children: "aaa",
}
export default MyComponentClass;

 

Counter.js

import { Component } from "react";

class Counter extends Component {
    // 컴포넌트 생성자 메서드
    // 클래스형 컴포넌트에서 constructor를 작성시 필수 super(props)
    // 리액트의 component 클래스가 지난 생성자 함수를 호출 !
    // constructor(props) {
    //     super(props);
    //     this.state = {
    //         number: 0,
    //         fixedNumber: 0,
    //     }
    // }
    state = {
        number: 0,
        fixedNumber: 0,
    }
    render() {
        const {number, fixedNumber} = this.state;
        return (
            <div>
                <h1>{number}</h1>
                <h2>바뀌지 않는 값: {fixedNumber}</h2>
                <button onClick={ ()=> {
                    this.setState({number: number+1},()=>{
                        console.log('setState가 호출되었습니다.');
                    });
                }}>+1</button>
            </div>
        );
    }
}
export default Counter;

 

CounterF.js

import React, { useState } from 'react';

const CounterF = () => {
    // useState 함수를 호출하면 배열을 반환해줌
    // 배열의 0번째에는 초기값
    // 배열의 1번째에는 이 값은 업데이트 해주는 함수

    const [message, setMessage] = useState('안녕');
    const onClickenter = () => setMessage('안녕하세요!');
    const onClickLeave = () => setMessage('안녕히가세요!');
    console.log(useState(0));
    return (
        <div>
            <button onClick={onClickenter}>입장</button>
            <button onClick={onClickLeave}>퇴장</button>
            <p>{message}</p>
        </div>
    );
};

export default CounterF;

 

EventPractice.js

import { Component } from "react";

class EventPractice extends Component {
    state = {
        message: '',
    }
    render() {
        return (
            <div>
                <h1>이벤트 연습</h1>
                <input type="text" name="message" placeholder="아무거나 입력하세요"
                onChange={(e)=>{
                    this.setState({
                        message: e.target.value
                    })
                    console.log(e.target.value);
                }}></input>
                <button onClick={()=>{
                    console.log(this.state.message)
                }}>확인</button>
            </div>
        )
    }
}
export default EventPractice;

'Stack > React' 카테고리의 다른 글

[React] React Component Styling  (0) 2022.06.23
[React] to-do list  (0) 2022.06.22
[React] 라이프 사이클 메서드(Life Cycle Method)  (0) 2022.06.21
[React] event-react(Event / ref)  (0) 2022.06.21
[React] 안녕 ~ React  (0) 2022.06.20
'Stack/React' 카테고리의 다른 글
  • [React] to-do list
  • [React] 라이프 사이클 메서드(Life Cycle Method)
  • [React] event-react(Event / ref)
  • [React] 안녕 ~ React
7ingout
7ingout
  • 7ingout
    Hello, 7ingout world!
    7ingout
  • 전체
    오늘
    어제
    • 분류 전체보기 (205)
      • Project (5)
      • Stack (173)
        • React (40)
        • JavaScript (50)
        • TypeScript (14)
        • HTML (11)
        • CSS (31)
        • Spring (9)
        • PHP (15)
        • SQL (3)
        • Python (0)
      • ETC (9)
      • Design (13)
        • Illustrator (6)
        • Photoshop (7)
      • Articloid (4)
        • 7ingout (4)
  • 공지사항

    • ☻
  • 인기 글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
7ingout
[React] 컴포넌트
상단으로

티스토리툴바