Data Scientist 옌

매일 발전하는 IT문제해결사

국비지원교육 (22.01-22.07)/강의노트

22-07-13(수) 115일차 [React, Team Project] React onClick, onChange, OnKey, redux, 리눅스란

옌炎 2022. 7. 14. 01:57
728x90

수업내용


1교시 (09:30-10:20)

  • 066/App.js
import React from 'react';
import ReactonClick from './R066_ReactonClick'

function App() {
  return (
    <div>
      <h1>Start React 200!</h1>
      <ReactonClick/>
    </div>
  );
}

export default App;
  • R066_ReactonClick.js
import React, { Component } from 'react';
import './App.css';

// 카멜 케이스
// 합성어를 낙타봉 처럼 쓰는 것
// 합성의 첫 번째 글자를 대문자로 쓰는 것 
// ComponentButton : Upper Camel Case
// stateButton : Lower Camel Case

class R066_ReactonClick extends Component {
	buttonClick = (param) => {
		if(typeof param != 'string') param = "Click a"
		console.log('param : ' + param);
	}

	render() {
		return (
		  <>
		    <button onClick={e => this.buttonClick("Click button")}>Click button</button>
		    <div onClick={e => this.buttonClick("Click div")}>Click div</div>
		    <a href="javascript:" onClick={this.buttonClick}>Click a</a>
		  </>
		)
	}
}

export default R066_ReactonClick;

  • 067/App.js
import React from 'react';
import R067_onChange from './R067_onChange'

function App() {
  return (
    <div>
      <h1>Start React 200!</h1>
      <R067_onChange/>
    </div>
  );
}

export default App;
  • R067_onChange.js
import React, { Component } from 'react';
import './App.css';

class R067_onChange extends Component {
	change = (e) => {
	  var val = e.target.value;
	  console.log('param : ' + val);
	}

	render() {
	  return (
	    <>
	      <input type="text" onChange={this.change}/>
	      <select onChange={this.change}>
	        <option value="react">react</option>
	        <option value="200">200</option>
	      </select>
	    </>
	  )
	}
}

export default R067_onChange;

  • 리눅스
    --------------
    리눅스는 GNU OS 이다.
    리눅스의 라이센스라던지 기타 제반 사항들은 모두 GNU를 따르게 되어 있습니다.

    배포판 : 레드헷 7.0, 8.0, SUSE 9.0
    커널 : 커널 2.6.6, 커널 2.530
    : 커널 버전 두번째 숫자가 짝수 면 안정화 버전, 홀수 면 개발버전

    수세(OpenSUSE) : 서버용 : 독일에서 출시 : 유럽에서 많이 사용 : 안정적인 리눅스 : 국내에는 자료가 별로 없음 

    데비안(Debian) : 서버용 : 배포되는 리눅스 들 중 안정성이 매우 높고, 다양한 패키지 활용, 서버용
    : ORG 비영리 단체에서 만들며,  완벽한 GNU를 추구
    우분투(Ubnutu) : 개인용 : 데비안 계열
    : APT(Advanced Package Tool)

    레드햇(Red Hat) : 서버용 : 현재 레드햇은 상용으로 판매되는 레드햇 엔터프라이즈 리눅스(RHEL)
    : RPM(Redhat Package Management)으로 인기
    페도라(Fedora) : RHEL에 포함될 기능을 미리 시험하는 용도로 사용 : 레드햇 계열
    센트OS(centOS) : 개인용 : 레드햇 계열

    한컴리눅스 : 데스크탑 운영체제를 추구한다. 
    리눅스용 한글프로그램을 만들어서, 
    리눅스를 사무용, 개인용으로 일반 사용자들이 쉽게 사용할 수 있도록 만들고 있다. 
    와우 : 서버급 운영체제, 한글화나 유저들이 좀더 쉽게 사용할수 있도록 프로그램을 만든다.

    초보자 : 우분투
    해킹용 : 칼리 리눅스(Kali linux)
    서버용 : RHEL(유료), centOS(무료)
    전문가용 : 페도라

2교시 (10:30-11:20)

  • 071/App.js
import React from 'react';
import ReactOnKey from './R071_OnKey'

function App() {
  return (
    <div>
      <h1>Start React 200!</h1>
      <ReactOnKey/>
    </div>
  );
}

export default App;
  • R071_OnKey.js
import React, { Component } from 'react';
import './App.css';

class R071_OnKey extends Component {
	OnKey(event, e) {
		var val = e.target.value;
		console.log('event : '+event, ", value : " + val);
	}

	render() {
		return (
		  <>
		    onKeyDown : <input type="text" onKeyDown={e => this.OnKey("onKeyDown", e)}/><br/>
		    onKeyPress : <input type="text" onKeyPress={e => this.OnKey("onKeyPress", e)}/><br/>
		    onKeyUp : <input type="text" onKeyUp={e => this.OnKey("onKeyUp", e)}/>
		  </>
		)
	}
}

export default R071_OnKey;

3교시 (11:30-12:20)

  • 080/App.js
import React, {Component} from 'react'
import StrAddButton from './StrAddButton'
import './App.css';

class App extends Component {
    render() {
        return (
            <div>
                <h1>Start React 200!</h1>
                <span>{this.props.store.getState().data.str}</span><br/>
                <StrAddButton store={this.props.store}/>
            </div>
        );
    }
}

export default App;
  • actions/index.js
export const ADD = 'ADD';
export const add = () => {
    return {
        type: ADD
    }
};
  • reducers/index.js
import {ADD} from '../actions'
import {combineReducers} from 'redux'

const initState = {
    str: 'react',
};

const data = (state = initState, action) => {
    switch (action.type) {
        case ADD:
            return state, {
                str: state.str + '200'
            };
        default:
            return state;
    }
};

const App = combineReducers({
    data
});

export default App;
  • StrAddButton.js
import React, {Component} from 'react';
import {add} from './actions'

class StrAddButton extends Component {
    render() {
        return (
            <input value='Add200' type="button" onClick={this.addString}/>
        )
    }

    addString = () => {
        this.props.store.dispatch(add());
    }
}

export default StrAddButton;

4교시 (12:30-13:20)

  • 083/App.js
import React, {Component} from 'react'
import {connect} from 'react-redux'
import StrAddButton from './StrAddButton'
import './App.css'

// npm install --save redux
// npm install --save react-redux

// react-redux 장점
// 1. store 를 매번 상속하지 않고 사용가능
// 2. store 데이터를 사용, 변경하는 코드를 모듈화해 컴포넌트 내에 중복된 코드 사용 최소화

class App extends Component {
    render() {
        return (
            <div>
                <h1>Start React 200!</h1>
                {/* <span>{this.props.store.getState().data.str}</span><br/> */}
                <span>{this.props.str}</span><br/>
                {/* <StrAddButton store={this.props.store}/> */}
                <StrAddButton AppProp="200"/>
            </div>
        );
    }
}

let mapStateToProps = (state, props) => {
    console.log('Props from indes.js : ' + props.indexProp)
    return {
        str: state.data.str,
    };
};

App = connect(mapStateToProps, null)(App);

export default App;
  • actions/index.js
export const ADD = 'ADD';
export const add = () => {
    return {
        type: ADD
    }
};
  • reducers/index.js
import {ADD} from '../actions'
import {combineReducers} from 'redux'

const initState = {
    str: 'react',
};

const data = (state = initState, action) => {
    switch (action.type) {
        case ADD:
            return state, {
                str: state.str + '200'
            };
        default:
            return state;
    }
};

const App = combineReducers({
    data
});

export default App;
  • StrAddButton.js
import React, {Component} from 'react';
import {connect} from 'react-redux';
import {add} from './actions'

class StrAddButton extends Component {
    render() {
        return (
            // <input value='Add200' type="button" onClick={this.addString}/>
            <input value='Add200' type="button" onClick={this.props.addString}/>
        )
    }

    // addString = () => {
    //     this.props.store.dispatch(add());
    // }
}

let mapDispatchToProps = (dispatch, props) => {
    console.log('Props from App.js : ' + props.AppProp)
    return {
        addString: () => dispatch(add())
    };
};

StrAddButton = connect(null, mapDispatchToProps)(StrAddButton);

export default StrAddButton;


5교시 (14:30-15:20)

  • 프로젝트 진행

6교시 (15:30-16:20)

  • 프로젝트 진행

7교시 (16:30-17:20)

  • 프로젝트 진행

8교시 (17:30-18:30)

  • 프로젝트 진행

Notes


728x90