Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

melius

[React] Component 프로퍼티, 상태 및 이벤트 본문

library & framework

[React] Component 프로퍼티, 상태 및 이벤트

melius102 2020. 3. 6. 10:32

프로퍼티(props)

컴포넌트가 외부에서 데이터를 받을 때에는 컴포넌트의 프로퍼티(props)를 이용한다. 프로퍼티는 읽기 전용으로 컴포넌트가 내부에서 프로퍼티를 변경하지 않는다.

class ValueInput extends React.Component {
    render() {
        return <input type="text" value={this.props.val} readOnly />;
    }
}

ReactDOM.render(<ValueInput val={"hello"} />, $('#root')[0]);

 

상태(state)

컴포넌트의 내부에서 변경 가능한 데이터를 관리해야할 때에는 상태(state)를 이용한다.

class ValueInput extends React.Component {
    constructor(props) {
        super(props);
        this.state = { val: this.props.val };
    }

    handleChange(e) { this.setState({ val: e.target.value }); }

    render() {
        return (
            <input type="text" value={this.state.val}
                onChange={e => { this.handleChange(e) }} />
        );
    }
}

ReactDOM.render(<ValueInput val={"hello"} />, $('#root')[0]);

 

이벤트(event)

컴포넌트에서 외부로 데이터를 전달하기 위해서 HTML 요소의 이벤트를 사용하다.

class ValueInput extends React.Component {
    constructor(props) {
        super(props);
        this.state = { val: this.props.val };
    }

    // static getDerivedStateFromProps(props, state) {
    //     return { val: props.val };
    // }

    handleChange(e) {
        let newVal = e.target.value;
        this.setState({ val: newVal });
        if (this.props.onChange) {
            this.props.onChange({ target: this, value: newVal });
        }
    }

    render() {
        return (
            <input type="text" value={this.state.val}
                onChange={e => { this.handleChange(e) }} />
        );
    }
}

function changeValue(e) {
    console.log(e.value);
}

ReactDOM.render(
    <ValueInput val={"hello"} onChange={e => {
        changeValue(e);
    }} />,
    $('#root')[0]
);

리액트의 이벤트는 재사용되는 합성 이벤트(SyntheticEvent)로서 HTML 이벤트를 감싸고 있는 구조이다. 기존 HTML 이벤트는 nativeEvent 속성에서 확인할 수 있다.

https://reactjs.org/docs/events.html

https://reactjs.org/docs/handling-events.html

 

 

'library & framework' 카테고리의 다른 글

[webpack] Development  (0) 2020.03.10
[webpack] Module Bundling  (0) 2020.03.06
[Firebase] 호스팅 시작하기  (0) 2020.02.29
[Three.js] 구성 요소  (0) 2020.02.22
[React] Component Lifecycle  (0) 2020.02.21
Comments