본문 바로가기
개발(라이브러리,프레임워크)/react.js & react native

props 와 state

by zieunee 2021. 9. 23.
반응형

props 와 state

props

컴포넌트 외부에서 컴포넌트에게 주는데이터

State

컴포넌트 내부에서 변경 할 수 있는 데이터

둘다 변경이 발생하면 랜더가 다시 일어날 수 있음

render 함수

props 와 state를 바탕으로 컴포넌트를 그린다. 그리고 props 와 state가 변경되면, 컴포넌트를 다시 그린다. 컴포넌트를 그리는 방법을 기술하는 함수가 랜더함수이다.

image

props 예시

function

//props >> {message: "하이하이"} 로 들어옴 
function Component(props) {
return (
        <div><h1>{props.message} 함수로만든컴포넌트 </h1> </div>
    );
}

ReactDOM.render(<Component  message = "하이하이" /> , document.querySelector("#root"))

class

class Component extends React.Component{
render() {
    return (
        <div><h1>{this.props.message} 클래스로만든컴포넌트 </h1> </div>
        ); 
    }
}

ReactDOM.render(
<Component message = "하이하이" /> , document.querySelector("#root")
)

props 기본 값 지정하기

class Component extends React.Component{
render() {
    return (
        <div><h1>{this.props.message} 클래스로만든컴포넌트 </h1> </div>
    ); 
}
//클래스에서 사용가능
static defaultProps = {
    message: "기본값"
    }
}

//함수에서도 사용가능
Component.defaultProps = {
    message:"기본값",
};

ReactDOM.render(
    <Component/> , document.querySelector("#root")
)

state 예시

class Component extends React.Component{
    state = { // 스테이트는 무조건 객체여야한다. 
        count: 0
    };
    render() {
        return (
            <div>
                <h1>
                    {this.props.message} 클래스로만든컴포넌트 
                </h1> 
                <p>{this.state.count}</p>
            </div>
        ); 
    }
}
ReactDOM.render(
    <Component/> , document.querySelector("#root")
)

state 변경 시 this.setState({...})를 사용해야 한다.

값이 바뀌고 render 가 다시 호출되는것!!

생성자로 쓰는방식

class Component extends React.Component{
    constructor(props){
        //생성자 함수 props를 받는다
        super(props); //props를 담아서 호출해주어야한다.

        this.state = {count : 0};
    }
    render() {
        return (
            <div>
                <h1>
                    {this.props.message} 클래스로만든컴포넌트 
                </h1> 
                <p>{this.state.count}</p>
            </div>
        ); 
    }

    componentDidMount(){
        setTimeout(() => {
            this.setState((proeviousState) => {
                //이전 state받아서 처리하기
                const newState = { count: proeviousState.count + 1 }
                return newState;
            });
        }, 1000);
    }

}


ReactDOM.render(
    <Component/> , document.querySelector("#root")
)
반응형

'개발(라이브러리,프레임워크) > react.js & react native' 카테고리의 다른 글

컴포넌트  (0) 2021.09.24
라이프사이클  (0) 2021.09.23
Firebase 연동  (0) 2021.07.01
axios / fetch  (0) 2021.06.30
apk 추출(리액트 네이티브)  (0) 2021.06.06