버튼을 클릭하거나 내용이 수정되었을때 어떠한 동작을 하도록 해보겠습니다. 

 

component 폴더 하위에 Event.js파일을 생성합니다. 

export default function Event(){

    return(
        <div>
            <div>
                <h1>Event Test</h1>
                <button>button A</button>
                <button>button B</button>

            </div>
            <input type="text"/>
        </div>
    );
}

생성한 component를 App.js에 추가합니다. 

import './App.css';
import Event from './component/Event';  //추가된 항목
function App() {
  return (
    <div className="App">
      <Event/>
    </div>
  );
}

export default App;

Event componet 작성된 결과

button A를 클릭할 때 alert 창을 호출하도록 작성하겠습니다. 

Event.js 파일을 수정합니다. 

export default function Event(){

    function callAlert(){
       alert("Button A를 클릭했어요");
    }
    return(
        <div>
            <div>
                <h1>Event Test</h1>
                <button onClick={callAlert}>button A</button>
                <button>button B</button>
            </div>
            <input type="text"/>
        </div>
    );
}

alert를 호출한 결과

button B에 onClick 이벤트를 직접 작성해보도록 하겠습니다. 

Event.js 파일을 수정합니다. 

export default function Event(){

    function callAlert(){
       alert("Button A를 클릭했어요");
    }
    return(
        <div>
            <div>
                <h1>Event Test</h1>
                <button onClick={callAlert}>button A</button>
                <button onClick={() =>{
                    console.log("####### Button Click B");
                    }
                    
                }>button B</button>
            </div>
            <input type="text"/>
        </div>
    );
}

button B를 클릭하여 console에 출력된 화면

함수로 값을 전달하도록 하겠습니다. 

Event.js 파일을 수정합니다.  (함수 추가, 버튼 추가)

export default function Event(){

    function callAlert(){
       alert("Button A를 클릭했어요");
    }
    function consoleTextPrint(arg){
        console.log("전달받은 값 : " + arg);
    }
    return(
        <div>
            <div>
                <h1>Event Test</h1>
                <button onClick={callAlert}>button A</button>
                <button onClick={() =>{
                    console.log("####### Button Click B");
                    }
                    
                }>button B</button>
                <button onClick={() =>{
                    consoleTextPrint("button Arg 전달!!!");
                    }
                    
                }>button Arg 전달</button>
            </div>
            <input type="text"/>
        </div>
    );
}

전달한 Text를 Console에 출력한 화면

 

input에 내용이 변경될 때 마다 console에 변경된 text를 출력하도록 하겠습니다. ( onChange 사용 )


Event.js 파일을 수정합니다.

export default function Event(){

    /* alert을 호출합니다. */
    function callAlert(){
       alert("Button A를 클릭했어요");
    }

    /* 전달받은 값을 console에 출력합니다. */
    function consoleTextPrint(arg){
        console.log("전달받은 값 : " + arg);
    }
    
    /* input Text 내용을 console에 출력합니다. */
    function printText(e){
        console.log(e.target.value);
    }
    return(
        <div>
            <div>
                <h1>Event Test</h1>
                <button onClick={callAlert}>button A</button>
                <button onClick={() =>{
                    console.log("####### Button Click B");
                    }
                    
                }>button B</button>
                <button onClick={() =>{
                    consoleTextPrint("button Arg 전달!!!");
                    }
                    
                }>button Arg 전달</button>
            </div>
            <input type="text" onChange={printText}/>
        </div>
    );
}

    - input에 onChange를 추가하고 동작할 함수의 이름을 작성합니다.

    - 동작할 함수는 event argument를 받아서 사용할 수 있기 때문에 e.target.value를 사용하여 이벤트를 전달한 객체의

      value값을 사용할 수 있습니다. 

 

1234를 입력하면서 변경된 내용이 console에 출력되는 화면

 

input을 한개 더 추가한 뒤 기존에 생성한 consoleTextPrint 함수를 이용해서 onChange 이벤트 안에 직접 작성해보겠습니다. 

Event.js 파일을 수정합니다.

export default function Event(){

    /* alert을 호출합니다. */
    function callAlert(){
       alert("Button A를 클릭했어요");
    }

    /* 전달받은 값을 console에 출력합니다. */
    function consoleTextPrint(arg){
        console.log("전달받은 값 : " + arg);
    }
    
    /* input Text 내용을 console에 출력합니다. */
    function printText(e){
        console.log(e.target.value);
    }
    return(
        <div>
            <div>
                <h1>Event Test</h1>
                <button onClick={callAlert}>button A</button>
                <button onClick={() =>{
                    console.log("####### Button Click B");
                    }
                    
                }>button B</button>
                <button onClick={() =>{
                    consoleTextPrint("button Arg 전달!!!");
                    }
                    
                }>button Arg 전달</button>
            </div>
            <input type="text" onChange={printText}/>
            <input type="text" onChange={
                e => {
                    const targetValue = e.target.value;
                    consoleTextPrint(targetValue);
                }
            }/>
        </div>
    );
}

consoleTextPrint함수를 이용하여 console에 출력한 화면

 

'Web > ReactJS' 카테고리의 다른 글

#07-02. prop : children의 사용  (0) 2023.01.01
#07-01. props의 사용  (0) 2023.01.01
#05. CSS의 작성  (2) 2022.12.22
#04-02. Component를 만들어보자  (0) 2022.12.20
#04-01. Component 란?  (0) 2022.12.20

CSS를 적용하는 방법은 3가지 방법이 있습니다. 

 

  • inline로 바로 작성하는 방법
  • CSS파일을 이용하여 작성
    • component 에 종속되지 않는 css 작성
    • component 에 종속되는 않는 css 작성

 

inline로 바로 작성하는 방법

아래 코드처럼 h2 테그안에 style 속성을 객체형식으로 지정하여 사용합니다. 

주의할 점은 '-' 를 사용하지않고 카멜 케이스로 작성합니다. 

 padding-left : "200px" paddingLeft : "200px"
export default function Greeting(){
    return <h2 style={
        {
            color : "#F33"
            ,paddingLeft : "200px"
            ,opacity : 0.3
        }
    }>Greeting!!!</h2>
}

css 적용 결과

CSS파일을 이용하여 작성 - component 에 종속되지 않는 css 작성

create-react-app으로 프로젝트를 생성하면 index.css, App.css가 이미 생성이 되어 있습니다. 

내용을 보면  index.css의 경우 전체 프로젝트에 영향을 미치는 css가 작성되어 있고 App.css는 App컴포넌트에만 적용되는 것처럼 작성이 되어있습니다.

 

App.css -아래 코드처럼 class를 추가합니다. 

.test {
  width: 100px;
  height: 100px;
  background-color: rgb(138, 97, 35);
}

 

App.js - <div className='test'>App component</div> 를 추가하였습니다. 

기존 class를 적용하는것처럼 class="클래스명"으로 사용하는 형태가 아닌  className이라는 속성으로 적용해야합니다.

import './App.css';
import Greeting from './component/Greeting';  
import Welcome from './component/Welcome'; 
function App() {
  return (
    <div className="App">
      <div className='test'>App component</div>
      <Greeting />   
      <Welcome />
    </div>
  );
}

export default App;

CSS가 적용된 상태

 

Greeting.css 파일을 생성한 뒤  아래 코드를 추가합니다. (동일한 class명)

.test {
    width: 200px;
    height: 200px;
    background-color: rgb(163, 104, 16);
  }

 

Greeting.js

import './Greeting.css';
export default function Greeting(){
    return (
        <div>
            <h2 style={
                    {
                        color : "#F33"
                        ,paddingLeft : "200px"
                        ,opacity : 0.3
                        ,border : "1px"
                        ,borderRight : "2px solid #111"
                    }
            }>Greeting!!!</h2>
            <div className="test">Greeting component</div>
        </div>
    )
}

하지만 이 두가지 파일에 모두 동일한  class 명으로 css를 작성하면 나중에 import되는 class가 오버라이딩하여 기존 동일한 class명의 css를 적용할 수 업습니다.  

위의 그림을 보면 Greeting.css의 내용이 App Component에도 적용되었습니다.  각각의 css파일이 각 component 별로 종속되어 적용되는 것이 아니라 실제 생성된느 패이지의 head영역에 모두 적용되기 때문에 동일한 css class명은 사용할 수 없습니다.  

 

CSS파일을 이용하여 작성 - component 에 종속되는 css 작성

그렇다면 각 component 별로 css가 적용되는 방법을 알아보도록 하겠습니다.

 

Greeting.css의 파일명을 Greeting.module.css로 변경합니다. 일반적으로 파일명을 작성할때 component에 종속되는 css는 component의 이름과 동일하게 작성합니다. 

 

파일명이 변경(오류가 발생함) 되었고 component에 종속되는 css를 작성하기 위해 기존 코드를 수정합니다. 

 

Greeting.js

import styles from './Greeting.module.css';   // 변경된 부분
export default function Greeting(){
    return (
        <div>
            <h2 style={
                    {
                        color : "#F33"
                        ,paddingLeft : "200px"
                        ,opacity : 0.3
                        ,border : "1px"
                        ,borderRight : "2px solid #111"
                    }
            }>Greeting!!!</h2>
            <div className={styles.test}>Greeting component</div>  // 변경된부분
        </div>
    )
}

import './Greeting.css' 항목을 위 예시 코드와 같이 import styles from './Greeting.module.css'; 로 변경합니다. 

각 component별로 css가 적용된 모습

 

reactJS CSS작성법에 알아보았습니다. 

'Web > ReactJS' 카테고리의 다른 글

#07-01. props의 사용  (0) 2023.01.01
#06. Event의 작성  (0) 2022.12.26
#04-02. Component를 만들어보자  (0) 2022.12.20
#04-01. Component 란?  (0) 2022.12.20
#03-02.폴더 및 파일의 역할  (0) 2022.12.19

생성되어있는 App.js에 컴포넌트를 추가하여 화면을 그리는 간단한 작업을 수행하겠습니다. 

 

src 폴더 하위에 component 폴더를 생성합니다. 

새로 생성한 component하위에 3개의 compoent 를 생성할 계획입니다. 

  • Greeting.js
  • Money.js
  • Welcome.js

 

 

 

 

 

 

Greeting.js 

export default function Greeting(){
    return <h2>Greeting!!!</h2>
}

Welcome.js

export default function Welcome(){
    return <h2>Welcome !!</h2>   
}

참고. Component를 작성할때 작성 방법

//방법 1
export default function Welcome(){
    return <h2>Welcome !!</h2>   
}

//방법 2
const Welcome = function(){
    return <h2>Welcome !!</h2>   
}
export defailt Welcome;

//방법 3
const Welcome = () => {
    return <h2>Welcome !!</h2>   
}
export defailt Welcome;

 

 

이렇게 작성된 두개의 Component를 App.js에서 사용해 보겠습니다. 

App.js

import './App.css';
import Greeting from './component/Greeting';
import Welcome from './component/Welcome';
function App() {
  return (
    <div className="App">
      <Greeting />
      <Welcome/>
    </div>
  );
}

export default App;

실행된 화면

이번에는 Welcome안에 Money를 넣어서 화면을 구성하도록 하겠습니다. 

 

Moneny.js 를 작성합니다. 

export default function Money(){
    return <h3>Money</h3>
}

Welcome.js를 아래와 같이 수정합니다.

import Money from './Money'

export default function Welcome(){
    return (
        <h2>Welcome !!</h2>   
        <Money/>
    )
}

그리고 저장을 하면 아래와 같이 오류가 발생합니다. 

JSX는 return할때 한개의 Object만 return할 수 있습니다. 

즉, Welcome의 <h2>와 <Money/> 안에 있는 <h3>가 리턴되어 2개의 Object가 리턴됨으로서 오류가 발생했습니다. 

 

Welcome.js의 코드를 아래와 같이 수정합니다. 

import Money from './Money'

export default function Welcome(){
    return (
        <abcd>
        <h2>Welcome !!</h2>   
        <Money/>
        </abcd>
    )
}

<abcd>를 추가하여 한개의 Object로 변경하여 retrurn되도록 수정하면 정상적으로 화면이 실행됩니다. 

'Web > ReactJS' 카테고리의 다른 글

#06. Event의 작성  (0) 2022.12.26
#05. CSS의 작성  (2) 2022.12.22
#04-01. Component 란?  (0) 2022.12.20
#03-02.폴더 및 파일의 역할  (0) 2022.12.19
#03-01. Create-react-app 설치 및 오류사항 대응  (0) 2022.12.19

+ Recent posts