IT/React

React 💬6

금마s 2021. 2. 2. 10:32

🎈 Props 🎈

state와 props의 가장 큰 차이점은 props는 불변이라는 것이다.

우리가 container component가 state로 정의되어야 한다는 이유가 된다.

 

 

📌 Props 사용

🔧 component에 불변의 데이터가 필요하다면 props를 main.js. 안에 있는 reactDOM.render() 함수에 추가하거나, 🔧 component 안에 사용하면 된다.

 

App.jsx

import React from 'react';

class App extends React.Component {
   render() {
      return (
         <div>
            <h1>{this.props.headerProp}</h1>
            <h2>{this.props.contentProp}</h2>
         </div>
      );
   }
}
export default App;

 

main.js

import React from 'react';
import ReactDOM from 'react-dom';
import App from './App.jsx';

ReactDOM.render(<App headerProp = "Header from props..." contentProp = "Content
   from props..."/>, document.getElementById('app'));

export default App;

 

💻

 

 

📌 Default Props

🔧 default 값을 component 생성자에 직접 넣어도 된다.

 

App.jsx

import React from 'react';

class App extends React.Component {
   render() {
      return (
         <div>
            <h1>{this.props.headerProp}</h1>
            <h2>{this.props.contentProp}</h2>
         </div>
      );
   }
}
App.defaultProps = {
   headerProp: "Header from props...",
   contentProp:"Content from props..."
}
export default App;

 

main.js

import React from 'react';
import ReactDOM from 'react-dom';
import App from './App.jsx';

ReactDOM.render(<App/>, document.getElementById('app'));

 

💻

 

결과는 전의 결과와 다르지 않다, 차이점은 우리는 이제 state만 변경하면 페이지의 데이터를 쉽게 변경할 수 있다는 것입니다.

 

 

📌 Validating Props

🔧 이번에는 App 컴포넌트에 우리가 필요한 모든 props를 넣어보자.

🔧 App.propTypes가 props validation을 위해 사용될 것이다.

🔧 만약에 props가 우리가 명시한 대로 쓰이지 않았다면 console에서 오류 메시지를 내보낼 것이다.

🔧 validation 패턴을 구체화한 후에, App.defaultProps를 세팅하자.

 

App.jsx

import React from 'react';

class App extends React.Component {
   render() {
      return (
         <div>
            <h3>Array: {this.props.propArray}</h3>
            <h3>Bool: {this.props.propBool ? "True..." : "False..."}</h3>
            <h3>Func: {this.props.propFunc(3)}</h3>
            <h3>Number: {this.props.propNumber}</h3>
            <h3>String: {this.props.propString}</h3>
            <h3>Object: {this.props.propObject.objectName1}</h3>
            <h3>Object: {this.props.propObject.objectName2}</h3>
            <h3>Object: {this.props.propObject.objectName3}</h3>
         </div>
      );
   }
}

App.propTypes = {
   propArray: React.PropTypes.array.isRequired,
   propBool: React.PropTypes.bool.isRequired,
   propFunc: React.PropTypes.func,
   propNumber: React.PropTypes.number,
   propString: React.PropTypes.string,
   propObject: React.PropTypes.object
}

App.defaultProps = {
   propArray: [1,2,3,4,5],
   propBool: true,
   propFunc: function(e){return e},
   propNumber: 1,
   propString: "String value...",
   
   propObject: {
      objectName1:"objectValue1",
      objectName2: "objectValue2",
      objectName3: "objectValue3"
   }
}
export default App;

 

main.js

import React from 'react';
import ReactDOM from 'react-dom';
import App from './App.jsx';

ReactDOM.render(<App/>, document.getElementById('app'));

 

💻

 

 

 

 

 

 

 

728x90

'IT > React' 카테고리의 다른 글

React 💬8  (0) 2021.02.02
React 💬7  (0) 2021.02.02
React 💬5  (0) 2021.02.01
REACT 💬4  (0) 2021.02.01
REACT 💬3  (0) 2021.01.29