본 게시글은 구름EDU 처음 만난 React 온라인강의를 시청한 후 학습한 정보를 기록하는 목적의 게시글입니다.

생각의 흐름에 따라 작성된 게시글입니다. 가독성이 떨어질 수 있습니다.

처음 만난 React

 

처음 만난 React(리액트) - 구름EDU

굉장히 기초적인 내용 위주로 빠르고 쉽게 만나는 React! 웹 서비스를 위해 알아두어야 할 리액트 필수 개념을 짚어봅시다.

edu.goorm.io

구름 EDU

 

구름EDU - 모두를 위한 맞춤형 IT교육

구름EDU는 모두를 위한 맞춤형 IT교육 플랫폼입니다. 개인/학교/기업 및 기관 별 최적화된 IT교육 솔루션을 경험해보세요. 기초부터 실무 프로그래밍 교육, 전국 초중고/대학교 온라인 강의, 기업/

edu.goorm.io


Shared State
> State에 있는 데이터를 여러개의 하위 컴포넌트에서 공유하여 사용하는 경우
> 하위 컴포넌트들이 각자 State에 데이터를 갖고 있을 필요가 없다
> 하위 컴포넌트의 state를 공통 상위 컴포넌트로 올려서 사용한다


{Project Name} / src / Chapter10 / TemperatureInput.js

import React from 'react';

const scaleNames = {
    c: 'Celsuis',
    f: 'Fahrenheit',
}

class TemperatureInput extends React.Component {
    constructor(props){
        super(props);
    }

    handleChange = (event) => {
        this.props.onTemperatureChange(event.target.value);
    }

    render(){
        const { scale, temperature } = this.props;

        return (
          <fieldset>
              <legend>Enter temperature in {scaleNames[scale]}:</legend>
              <input
                value={temperature}
                onChange={this.handleChange}/>
          </fieldset>  
        )
    }
}

export default TemperatureInput;

{Project Name} / src / Chapter10 / Calculator.js

import React from 'react';
import TemperatureInput from './TemperatureInput';

function BoilingVerdict(props){
    if(props.celsius >= 100){
        return <p>The water would boil.</p>
    }
    return <p>The water would not boil.</p>
}

function toCelsius(fahrenheit){
    return (fahrenheit - 32) * 5 / 9;
}

function toFahrenheit(celsius){
    return (celsius * 9 / 5) + 32;
}

function tryConvert(temperature, convert) {
    const input = parseFloat(temperature);
    if(Number.isNaN(input)) {
        return '';
    }
    const output = convert(input);
    const rounded = Math.round(output * 1000) / 1000;
    return rounded.toString();
}

class Calulator extends React.Component {
    constructor(props){
        super(props);

        this.state = {
            scale: 'c',
            temperature: '',
        }
    }

    handleCelsiusChange = (temperature) => {
        this.setState({scale: 'c', temperature: temperature});
    }

    handleFahrenheitChange = (temperature) => {
        this.setState({scale: 'f', temperature: temperature});
    }

    render() {
        const { scale, temperature } = this.state;
        const celsius = scale === 'f' ? tryConvert(temperature, toCelsius) : temperature;
        const fahrenheit = scale === 'c' ? tryConvert(temperature, toFahrenheit) : temperature;

        return (
            <div>
                <TemperatureInput
                    scale = 'c'
                    temperature = {celsius}
                    onTemperatureChange = {this.handleCelsiusChange} />
                
                <TemperatureInput
                    scale = 'f'
                    temperature = {fahrenheit}
                    onTemperatureChange = {this.handleFahrenheitChange} />

                <BoilingVerdict
                    celsius={parseFloat(celsius)} />
            </div>
        )
    }
}

export default Calulator;

{Project Name} / src / index.js

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

ReactDOM.render(
  <Calculator/>,
  document.getElementById('root')
);
reportWebVitals();
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기