React: ES6 클래슀 ꡬ문의 κΈ°λ³Έ μ†Œν’ˆ

에 λ§Œλ“  2015λ…„ 04μ›” 22일  Β·  40μ½”λ©˜νŠΈ  Β·  좜처: facebook/react

ES6 지원 λ°œν‘œ λŠ” λ‹€μŒκ³Ό 같이 λ§ν•©λ‹ˆλ‹€.

클래슀 μƒνƒœλ₯Ό μ§€μ •ν•˜λŠ” κ΄€μš©μ  방법은 κ°„λ‹¨ν•œ μΈμŠ€ν„΄μŠ€ 속성을 μ‚¬μš©ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. λ§ˆμ°¬κ°€μ§€λ‘œ getDefaultProps 및 propTypesλŠ” μ‹€μ œλ‘œ μƒμ„±μžμ˜ 속성일 λΏμž…λ‹ˆλ‹€.

이것은 λ‚˜μ—κ²Œ λ§Žμ€ μ˜λ―Έκ°€ μžˆμ§€λ§Œ λ‹€μ‹œ 생각할 κ°€μΉ˜κ°€ μžˆλŠ” λͺ‡ 가지 μž‘μ€ 뢈일치λ₯Ό λ°œκ²¬ν–ˆμŠ΅λ‹ˆλ‹€.

μ›λž˜ .createClass ꡬ문을 μ‚¬μš©ν•  λ•Œ getDefaultProps λ°˜ν™˜λœ 값은 μƒμ„±μžλΏλ§Œ μ•„λ‹ˆλΌ ꡬ성 μš”μ†Œ 수λͺ… 주기의 λ‹€λ₯Έ μ§€μ μ—μ„œ μ‚¬μš©λ˜λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ componentWillReceiveProps(props) μ „μ†‘λ˜λŠ” λ‚΄μš©μ„ κ²€μ‚¬ν•˜λ©΄ κΈ°λ³Έ propsκ°€ μ μš©λ˜λŠ” 것을 λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

이것은 ES6 클래슀 ꡬ문을 μ‚¬μš©ν•  λ•Œ _ν•˜μ§€ μ•ŠλŠ”_ 것 κ°™μŠ΅λ‹ˆλ‹€. 즉, μ½”λ“œλ₯Ό λ³΅μ œν•΄μ•Ό ν•©λ‹ˆλ‹€. λ‚΄κ°€ μ˜λ―Έν•˜λŠ” λ°”μ˜ μ˜ˆλŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

class Control extends React.Component {

  constructor(props) {
    props.value = props.value || '';
    super(props);
  }

  // ...

  componentWillReceiveProps(props) {
    props.value = props.value || '';
    // Do something with props...
  }

}

λ³΄μ‹œλ‹€μ‹œν”Ό props.value = props.value || '' ν‘œν˜„μ‹μ„ λ³΅μ œν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. 기본값이 두 개 μ΄μƒμ΄μ—ˆλ‹€λ©΄ λΆ„λͺ…νžˆ 더 λ§Žμ€ 쀑볡이 생겼을 κ²ƒμž…λ‹ˆλ‹€.

μ‚¬μš©ν•˜λŠ” 경우 .createClass 방법을, λ‚˜λŠ” λ°˜ν™˜ ν•  수 {value: ''} λ‘œλΆ€ν„° getDefaultProps 방법을,이 μž‘λ™ 것, λ‚΄κ°€ ν•œ λ²ˆλ§Œν•΄μ•Ό ν•  κ²ƒμž…λ‹ˆλ‹€.

λΆˆν•„μš”ν•œ 쀑볡을 ν”Όν•˜κΈ° μœ„ν•΄ 이 방법을 λ³΅μ›ν•˜λŠ” 것이 ν•©λ¦¬μ μž…λ‹ˆκΉŒ? λ‚΄κ°€ λͺ¨λ₯΄λŠ” 또 λ‹€λ₯Έ React와 μœ μ‚¬ν•œ μ ‘κ·Ό 방식이 μžˆμŠ΅λ‹ˆκΉŒ?

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

λ§žμŠ΅λ‹ˆλ‹€. λŒ€μ‹  λ‹€μŒκ³Ό 같이 μž‘μ„±ν•©λ‹ˆλ‹€.

class Control extends React.Component {

  // ...

  componentWillReceiveProps(props) {
    // Do something with props...
  }

}
Control.defaultProps = {value: ''};

그게 당신을 μœ„ν•΄ μž‘λ™ν•©λ‹ˆκΉŒ?

λͺ¨λ“  40 λŒ“κΈ€

componentWillReceivePropsκ°€ 호좜될 λ•Œ κΈ°λ³Έ propsλŠ” 이미 λ³‘ν•©λ˜μ–΄ μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.

componentWillReceivePropsκ°€ 호좜될 λ•Œ κΈ°λ³Έ propsλŠ” 이미 λ³‘ν•©λ˜μ–΄ μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.

λ‚΄κ°€ 말할 수 μžˆλŠ” ν•œ getDefaultProps λŠ” ES6 클래슀 ꡬ문을 μ‚¬μš©ν•  λ•Œ ν˜ΈμΆœλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

λ§žμŠ΅λ‹ˆλ‹€. λŒ€μ‹  λ‹€μŒκ³Ό 같이 μž‘μ„±ν•©λ‹ˆλ‹€.

class Control extends React.Component {

  // ...

  componentWillReceiveProps(props) {
    // Do something with props...
  }

}
Control.defaultProps = {value: ''};

그게 당신을 μœ„ν•΄ μž‘λ™ν•©λ‹ˆκΉŒ?

μ•„, μ£„μ†‘ν•©λ‹ˆλ‹€. μ§€κΈˆ λ¬Έμ„œμ—μ„œ ν™•μΈν–ˆμŠ΅λ‹ˆλ‹€. 감사 ν•΄μš”!

Google 검색을 톡해 여기에 λ„μ°©ν–ˆκ³  μ½”λ“œλ₯Ό μΊ‘μŠν™”ν•˜λŠ” 데 class λ₯Ό μ„ ν˜Έν•˜κΈ° λ•Œλ¬Έμ— κΈ°λ³Έ μ†Œν’ˆμ€ λ‹€μŒκ³Ό 같이 κ³„μ‚°λœ 속성을 μ‚¬μš©ν•˜μ—¬ μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

import React, {Component, PropTypes} from 'react'
class DefaultPropsExample extends Component {
  static defaultProps = {
    ...Component.defaultProps,
    instructions: 'Usage instructions not provided.',
  }
}

@jhabdas 당신이 μ€€ 것은 ES2015 ꡬ문이 μ•„λ‹™λ‹ˆλ‹€. λ‚΄κ°€ static propsλ₯Ό μ‚¬μš©ν•˜λ©΄ Babelμ—μ„œ 예기치 μ•Šμ€ 토큰이 λ°œμƒν•˜μ§€λ§Œ es2015μ—μ„œ λ‚˜μ™€ 같은 μž‘μ—…μ„ ν•˜λŠ” μ‚¬λžŒλ“€μ„ μœ„ν•΄ μž‘λ™ν•˜λŠ” ν•­λͺ©μ΄ μžˆμŠ΅λ‹ˆλ‹€.

import React from 'react';
export default class extends React.Component {

  static get defaultProps() {
    return {
      // stuff you want :)
    }
  }

}

μ—…λ°μ΄νŠΈ

@zpao 의 링크λ₯Ό μ„€μΉ˜ν•œ ν›„ 정적 속성을 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€ ...

@Gopikrishna19 클래슀 속성 μ œμ•ˆμ„ κ΅¬ν˜„ν•˜λŠ” λ‹€λ₯Έ babel ν”ŒλŸ¬κ·ΈμΈμ„ ν™œμ„±ν™”ν•΄μ•Ό ν•©λ‹ˆλ‹€. http://babeljs.io/docs/plugins/transform-class-properties/

@zpao 였였 ! 였늘 또 λ‹€λ₯Έ μƒˆλ‘œμš΄ 것듀 :) 그것을 μ‹œλ„ν•  κ²ƒμž…λ‹ˆλ‹€, λŒ€λ‹¨νžˆ κ°μ‚¬ν•©λ‹ˆλ‹€!

@Gopikrishna19 μ‹€μ œλ‘œ κ²Œμ‹œν•œ μ½”λ“œ 쑰각이 λ§ˆμŒμ— λ“­λ‹ˆλ‹€. κΈ°λ³Έ μ†Œν’ˆμ„ μ΄ˆκΈ°ν™”ν•˜κΈ° 전에 사전 처리λ₯Ό ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ–ΈκΈ‰ν•΄ μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€.

이것은 μž‘λ™ν•˜λŠ” 것 κ°™κ³  λ‚΄ μ˜κ²¬μœΌλ‘œλŠ” 더 μš°μ•„ν•©λ‹ˆλ‹€.

....

 static defaultProps = {
      //someDefaultProps
  };

  constructor(props, defaultProps) {
    super(props, defaultProps);
  }

....

@fxhereng 두 번째 μΈμˆ˜λŠ” context 용으둜 μ˜ˆμ•½λ˜μ–΄ μžˆμœΌλ―€λ‘œ ν–₯ν›„ λ¦΄λ¦¬μŠ€μ—μ„œ 쀑단될 수 μžˆμœΌλ―€λ‘œ 일뢀 μ‚¬μš©μž μ •μ˜ 의미둜 μž¬μ •μ˜ν•˜μ§€ μ•Šμ„ κ²ƒμž…λ‹ˆλ‹€.

Ok @gaearon κΈ°λ³Έ μ†Œν’ˆμ„ μ„€μ •ν•˜λŠ” κ°€μž₯ 쒋은 방법은 λ¬΄μ—‡μž…λ‹ˆκΉŒ?

감사 ν•΄μš”,

이에 λŒ€ν•œ ꢌμž₯ 방법은 λ¬΄μ—‡μž…λ‹ˆκΉŒ?

μ‹€ν—˜μ  λ³€ν™˜ http://babeljs.io/docs/plugins/transform-class-properties/ λ₯Ό μ‚¬μš©ν•˜λŠ” 경우 static defaultProps = {...}; 만 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μƒμ„±μžλ₯Ό λ³€κ²½ν•  ν•„μš”κ°€ μ—†μŠ΅λ‹ˆλ‹€. 그렇지 μ•ŠμœΌλ©΄ 외뢀에 ν• λ‹Ήν•΄μ•Ό ν•©λ‹ˆλ‹€.

class X extends React.Component {
}
X.defaultProps = {...};

λ˜ν•œ..

class X extends React.Component {
  props = {
    ...
  }
}

@efernandesng μ§€μ›λ˜μ§€ μ•ŠλŠ” νŒ¨ν„΄μž…λ‹ˆλ‹€. defaultProps 처럼 μž‘λ™ν•˜μ§€ μ•ŠμœΌλ©° this.props λ₯Ό λ³€κ²½ν•˜μ§€ μ•Šμ•„μ•Ό ν•©λ‹ˆλ‹€.

defaultPropsλ₯Ό λΆ€λͺ¨ ν΄λž˜μŠ€μ™€ ν•¨κ»˜ μΈμŠ€ν„΄μŠ€ν™”ν•˜μ—¬ ν•΄λ‹Ή μ†Œν’ˆμ„ λ‹€λ₯Έ μžμ‹ ν΄λž˜μŠ€μ— 전달할 수 μ—†λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€.

κ·Έλ ‡κ²Œν•˜λŠ” ν‘œμ€€ es6 방법이 μžˆμŠ΅λ‹ˆκΉŒ? 여기에 μžˆλŠ” λͺ¨λ“  방법은 μ €μ—κ²Œ μ ν•©ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

defaultPropsλ₯Ό λΆ€λͺ¨ ν΄λž˜μŠ€μ™€ ν•¨κ»˜ μΈμŠ€ν„΄μŠ€ν™”ν•˜μ—¬ ν•΄λ‹Ή μ†Œν’ˆμ„ λ‹€λ₯Έ μžμ‹ ν΄λž˜μŠ€μ— 전달할 수 μ—†λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€.

무슨 말씀이신지 이해가 λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 예λ₯Ό 보여쀄 수 μžˆμŠ΅λ‹ˆκΉŒ?

λ¬Όλ‘  μ£„μ†‘ν•©λ‹ˆλ‹€.

λ‹€μŒμ€ ꡬ성 μš”μ†Œμž…λ‹ˆλ‹€.

import React, 
{
  Component,
  PropTypes
}                     from 'react';
import { TimerView }  from './TimerView'

class Timer extends Component {
  constructor(props) {
    super(props);
  }

  componentWillReceiveProps(props) {
    console.log('Will receive props')
  }

  render() {
    console.log("Timer loaded")

    return (
      <TimerView {...props} />
    )
  }
}

Timer.propTypes = {
  status: PropTypes.string.isRequired,
};

Timer.defaultProps = {
  status: "This is the Timer",
};

export default Timer;

webpack-dev-serverλ₯Ό μ‹€ν–‰ν•˜λ©΄ λ‹€μŒ 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€.
Uncaught ReferenceError: props is not defined

λ‚΄κ°€ λ­”κ°€ 잘λͺ»ν•˜κ³  μžˆλŠ”κ²Œ ν‹€λ¦Όμ—†μ–΄...

props 은 render() λ©”μ„œλ“œμ˜ λ°”μΈλ”©λ˜μ§€ μ•Šμ€ λ³€μˆ˜μž…λ‹ˆλ‹€. <TimerView {...this.props} /> 이어야 ν•©λ‹ˆλ‹€.

μ–΄λ¨Έ.
λ‚˜λŠ” 이것을 μ™„μ „νžˆ 놓쳀닀. λ‚˜λŠ” μƒνƒœ λΉ„μ €μž₯ ꡬ성 μš”μ†Œλ₯Ό 클래슀만큼 많이 μ‚¬μš©ν•˜κΈ° λ•Œλ¬Έμ— 이것에 λŒ€ν•΄ ν˜Όλž€μŠ€λŸ¬μ›Œν–ˆμŠ΅λ‹ˆλ‹€.

κ°μ‚¬ν•©λ‹ˆλ‹€.

λ¬Έμ œμ—†μ–΄μš” @jeanmichelcote! 그것은 μΌμ–΄λ‚œλ‹€ :)

defaultPropsλ₯Ό μ •μ˜ν•˜κΈ° μœ„ν•΄ λ‹€λ₯Έ props에 μ•‘μ„ΈμŠ€ν•˜λŠ” 것은 μ•ˆν‹° νŒ¨ν„΄μœΌλ‘œ κ°„μ£Όλ©λ‹ˆκΉŒ?

class Comp extends from React.Component {
  static propTypes: {
    num: React.PropTypes.number.isRequired,
    action: React.PropTypes.func,
  };

  static defaultProps: {
    action: () => console.log(this.props.num), // "this" is invalid in static context
  };

  render() {
    return (
      <button onClick={this.props.action}>
        {`Log #${this.props.num}`}
      </button>
    );
  }
}

@romulof 정적 λ©”μ„œλ“œμ—μ„œ μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λ₯Ό μ°Έμ‘°ν•˜λ €λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€. μ–΄λ–€ this 에 λŒ€ν•΄ μ΄μ•ΌκΈ°ν•˜κ³  μžˆλŠ”μ§€ μ•Œ 수 μžˆλŠ” 방법이 μ—†κΈ° λ•Œλ¬Έμ— κ·Έλ ‡κ²Œ ν•  수 μ—†μŠ΅λ‹ˆλ‹€. μ •μ˜μ— λ”°λ₯΄λ©΄ 정적 사물은 항상 μΈμŠ€ν„΄μŠ€ μ»¨ν…μŠ€νŠΈ 외뢀에 μžˆμŠ΅λ‹ˆλ‹€.

@romulof 그것은 λͺ¨λ“  객체 지ν–₯ 언어에 κ³΅ν†΅μ μž…λ‹ˆλ‹€. λš±λš±ν•œ ν™”μ‚΄ν‘œ ꡬ문은 μ •μ˜λœ μ»¨ν…μŠ€νŠΈμ— λ°”μΈλ”©λ©λ‹ˆλ‹€. μ•„λ§ˆλ„ λ‹€μŒμ„ μ‚¬μš©ν•΄ λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

static defaultProps: {
    action: function() {
        console.log(this.props.num), // "this" depends on the context where it is run
    }
};

@sbussard : λ§žμŠ΅λ‹ˆλ‹€.

λ‚΄ μ§ˆλ¬Έμ€ defaultProps 이 정적 개체둜 κ΅¬ν˜„λ˜λŠ” 것에 κ΄€ν•œ κ²ƒμž…λ‹ˆλ‹€.
μ•„λ§ˆλ„ μƒμ„±μžμ— μ˜ν•΄ ν˜ΈμΆœλ˜λŠ” ν•¨μˆ˜κ°€ 될 수 μžˆμŠ΅λ‹ˆλ‹€.

μ΅œμ ν™” μ»΄νŒŒμΌλŸ¬κ°€ 호좜 μ‚¬μ΄νŠΈμ—μ„œ 인라인할 수 μžˆλ„λ‘ μ˜λ„μ μœΌλ‘œ 클래슀 외뢀에 μžˆμŠ΅λ‹ˆλ‹€.

κ·Έλž˜μ„œ μ΅œμ’… 닡은 λ¬΄μ—‡μž…λ‹ˆκΉŒ?

@gaearon μ–ΈκΈ‰

μ΅œμ ν™” μ»΄νŒŒμΌλŸ¬κ°€ 호좜 μ‚¬μ΄νŠΈμ—μ„œ 인라인할 수 μžˆλ„λ‘ μ˜λ„μ μœΌλ‘œ 클래슀 외뢀에 μžˆμŠ΅λ‹ˆλ‹€.

ν•˜μ§€λ§Œ "클래슀 μΈμŠ€ν„΄μŠ€ ν•„λ“œ" 및/λ˜λŠ” "클래슀 정적 ν•„λ“œ"λ₯Ό μ‚¬μš©ν•  λ•Œ μ΅œμ ν™”ν•  수 μ—†λ‹€λŠ” μ˜λ―Έμž…λ‹ˆκΉŒ? λ‚˜λŠ” μ–΄λ–€ μ ‘κ·Ό 방식이 μ„ ν˜Έλ˜κ³  μ™œ κ·ΈλŸ°μ§€ μ΄ν•΄ν•˜λ €κ³  λ…Έλ ₯ν•˜κ³  μžˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

κ·Έλž˜μ„œ μ΅œμ’… 닡은 λ¬΄μ—‡μž…λ‹ˆκΉŒ?

ES6을 κ³ μˆ˜ν•˜κ³  μ‹Άλ‹€λ©΄ 맨 μ•„λž˜μ— ν• λ‹Ήν•˜μ‹­μ‹œμ˜€.

class MyComponent extends Component { /* ... */ }
MyComponent.defaultProps = { /* ... */ };

Create React App을 μ‚¬μš© μ€‘μ΄κ±°λ‚˜ μ‹€ν—˜μ  ꡬ문에 μ΅μˆ™ν•˜κ³  클래슀 속성 λ³€ν™˜μ„ ν™œμ„±ν™”ν•œ 경우 λ‹€μŒμ„ μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

class MyComponent extends Component {
  static defaultProps = { /* ... */ };
  /* ... */
}

μ΄λŸ¬ν•œ μ ‘κ·Ό 방식은 μ™„μ „νžˆ λ™μΌν•©λ‹ˆλ‹€. λ°μ½”λ ˆμ΄ν„°λ„ μ‚¬μš©ν•˜λŠ” 경우 μ΄λŸ¬ν•œ λ³€ν™˜μ„ κ²°ν•©ν•˜λŠ” μ΄μƒν•œ 버그 κ°€ μžˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ 클래슀 속성과 ν•¨κ»˜ λ°μ½”λ ˆμ΄ν„°λ₯Ό μ‚¬μš©ν•˜λŠ” 것은 ꢌμž₯ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

이게 도움이 되길 λ°”λž€λ‹€!

ν•˜μ§€λ§Œ "클래슀 μΈμŠ€ν„΄μŠ€ ν•„λ“œ" 및/λ˜λŠ” "클래슀 정적 ν•„λ“œ"λ₯Ό μ‚¬μš©ν•  λ•Œ μ΅œμ ν™”ν•  수 μ—†λ‹€λŠ” μ˜λ―Έμž…λ‹ˆκΉŒ? λ‚˜λŠ” μ–΄λ–€ μ ‘κ·Ό 방식이 μ„ ν˜Έλ˜κ³  μ™œ κ·ΈλŸ°μ§€ μ΄ν•΄ν•˜λ €κ³  λ…Έλ ₯ν•˜κ³  μžˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

λ§ˆμ§€λ§‰μ— ν• λ‹Ήν•˜λŠ” 것과 클래슀 속성을 μ‚¬μš©ν•˜λŠ” κ²ƒμ—λŠ” 차이가 μ—†μŠ΅λ‹ˆλ‹€. ν• λ‹Ήν•  클래슀 속성 desugar. μ–΄λ–€ μ½”λ“œκ°€ μ»΄νŒŒμΌλ˜λŠ”μ§€ ν™•μΈν•˜λ €λ©΄ Babel μ›Ήμ‚¬μ΄νŠΈμ—μ„œ REPL을 μ‚¬μš©ν•˜μ‹­μ‹œμ˜€.

@romulofκ°€ μ΄μ•ΌκΈ°ν•˜λŠ” λ™μΌν•œ λ¬Έμ œμ— λŒ€ν•΄ κΆκΈˆν•©λ‹ˆλ‹€. λ¬Όλ‘  static defaultProps λ₯Ό μ‚¬μš©ν•˜μ—¬ κΈ°λ³Έ 속성을 μ •μ˜ν•  수 μžˆμ§€λ§Œ μ»¨ν…μŠ€νŠΈλ₯Ό μ‚¬μš©ν•˜λ €λ©΄ μ–΄λ–»κ²Œ ν•΄μ•Ό ν•©λ‹ˆκΉŒ?

이것이 μ™œ μœ μš©ν•œκ°€μš”?

title 및 onSubmit μ†Œν’ˆμ΄ μžˆλŠ” 일반 λͺ¨λ‹¬ ꡬ성 μš”μ†Œκ°€ μžˆμŠ΅λ‹ˆλ‹€. λ•Œλ‘œλŠ” 같은 μ†Œν’ˆμœΌλ‘œ λ‚΄ μ•±μ˜ μ™„μ „νžˆ λ‹€λ₯Έ λΆ€λΆ„μ—μ„œ λͺ¨λ‹¬μ„ μ‚¬μš©ν•˜κ³  μ‹ΆμŠ΅λ‹ˆλ‹€. title 이것은 잘 μž‘λ™ν•©λ‹ˆλ‹€.

class CreateUserModal extends Modal {
  static defaultProps = { title: 'Create a new user' }
}

κ·ΈλŸ¬λ‚˜ μ μ ˆν•œ μ½”λ“œ 덩어리인 onSubmit ν•Έλ“€λŸ¬λŠ” μ—°κ²° reduxμ—μ„œ μ±„μ›Œμ§„ prop을 μ‚¬μš©ν•˜κΈ° λ•Œλ¬Έμ— μ»¨ν…μŠ€νŠΈκ°€ ν•„μš”ν•©λ‹ˆλ‹€. μ»¨ν…μŠ€νŠΈλ₯Ό λΆ€λͺ¨ 클래슀의 propsλ₯Ό μ„€μ •ν•˜λŠ” 데 μ‚¬μš©ν•  수 μ—†κΈ° λ•Œλ¬Έμ— ν˜„μž¬ 이 μ½”λ“œλ₯Ό 좔상화할 방법이 μ—†μŠ΅λ‹ˆλ‹€.

λ‚΄κ°€ν•˜λ €κ³ ν•˜λŠ” 것은 μ‹€μ œλ‘œ μ•ˆν‹° νŒ¨ν„΄μ΄ μ•„λ‹ˆλ―€λ‘œ (λ˜λŠ” 적어도 그렇지 μ•Šλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€) λ‹€λ₯Έ 방법이 μžˆλŠ”μ§€ κΆκΈˆν•©λ‹ˆλ‹€.

λ‚˜λŠ” λ‚΄κ°€ 같은 것을 ν•  수 있기λ₯Ό λ°”λžλ‹€.

class CreateUserModal extends Modal {
  constructor (props) {
    super({
      title: 'Create a new user',
      onSubmit: () => {
        // do a load of stuff using props
      }
    })
  }
}

ν•˜μ§€λ§Œ μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

@roberttod λ¬Έμ œμ— λŒ€ν•œ 해결책을 μ°Ύμ•˜μŠ΅λ‹ˆκΉŒ? 감사 ν•΄μš”

후속 μ§ˆλ¬Έμ„ ν•˜κ³  μ‹ΆμŠ΅λ‹ˆλ‹€.
λ°˜μ‘ μ•± λ§Œλ“€κΈ°(react-scripts v1.0.12)λ₯Ό μ‚¬μš©ν•˜λŠ” 경우 초기 μƒνƒœλ₯Ό λ‹€μŒκ³Ό 같이 μ •μ˜ν•΄λ„ λ©λ‹ˆκΉŒ?

class Foo extends Component {
  static defaultProps = {};

  static propTypes = {};

  state = {...};
}

μƒμ„±μžλ₯Ό μ‚¬μš©ν•˜μ—¬ 초기 μƒνƒœλ₯Ό λ‹€μŒκ³Ό 같이 μ •μ˜ν•˜λŠ” 것과 λΉ„κ΅ν•˜μ—¬ 차이점은 λ¬΄μ—‡μž…λ‹ˆκΉŒ?

class Foo extends Component {
  static defaultProps = {};

  static propTypes = {};

  constructor(props) {
    super(props);

    this.state = {...};
  }
}

특히 첫 번째 μ ‘κ·Ό 방식에 μ„±λŠ₯에 영ν–₯이 μžˆμŠ΅λ‹ˆκΉŒ?

λ³„λ°˜ λ‹€λ₯Όκ²Œ 없이 λ˜‘κ°™μŠ΅λ‹ˆλ‹€.

@jhabdas κΈ€μŽ„, defaultPropsκ°€ λ‹€μŒκ³Ό 같이 μ •μ˜λ  λ•Œ:

static defaultProps = {
}

이후 클래슀 λ©”μ†Œλ“œμ—μ„œ μ•‘μ„ΈμŠ€ν•˜λŠ” 방법:

this.defaultProps

undefined λ°˜ν™˜ν•©λ‹ˆλ‹€.

@majioa ν•΄λ‹Ή 클래슀 μˆ˜μ€€ API에 λŒ€ν•΄μ„œλŠ” λͺ¨λ₯΄μ§€λ§Œ ν•œ 가지 μ•„μ΄λ””μ–΄λŠ” κΈ°λ³Έ propsλ₯Ό λ³„λ„μ˜ 개체둜 μΊμ‹œν•˜κ³  μ°Έμ‘°ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. μ–΄λ–»κ²Œ μƒκ°ν•˜λ‚˜μš”?

@majioa

class Foo extends React.Component {
  static defaultProps = { param: 1 };
  render() {
    return Foo.defaultProps.param;
  }
}

같은 λ¬Έμ œκ°€ λ°œμƒν•˜λ©΄ babel-plugin-transform-class-propertiesλ₯Ό μ„€μΉ˜ν•΄μ•Ό

npm install -D babel-plugin-transform-class-properties

그런 λ‹€μŒ .babelrc에 "transform-class-properties" λ₯Ό μΆ”κ°€ν•©λ‹ˆλ‹€.

{
  "presets": ["env", "react"],
  "plugins": ["react-hot-loader/babel", "transform-class-properties"]
}

정적 get defaultProps() {
λ°˜ν’ˆ {
μžλ™μ°¨: "λ©”λ₯΄μ„Έλ°μŠ€"
}

@Arm7107 μš”μ†Œκ°€ 생성될 λ•Œλ§ˆλ‹€ μƒˆλ‘œμš΄ 객체λ₯Ό μƒμ„±ν•˜κΈ° λ•Œλ¬Έμ— λΉ„νš¨μœ¨μ μž…λ‹ˆλ‹€. λ‚˜λŠ” 이것을 μ‚¬μš© ν•˜μ§€ μ•ŠλŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€. 속성을 ν• λ‹Ήν•©λ‹ˆλ‹€.

MyComponent.defaultProps = {
  // ...
}

λ˜λŠ” μ‹€ν—˜μ  정적 클래슀 속성 ꡬ문을 μ‚¬μš©ν•˜μ‹­μ‹œμ˜€.

class MyComponent extends React.Component {
  static defaultProps = {
    // ...
  };

  // ...
}

(바벨 ν”ŒλŸ¬κ·ΈμΈμ΄ ν•„μš”ν•©λ‹ˆλ‹€)

Google 검색결과에 잘λͺ»λœ μ œμ•ˆμ΄ 더 이상 ν‘œμ‹œλ˜μ§€ μ•Šλ„λ‘ 이 문제λ₯Ό μž κ·Έκ² μŠ΅λ‹ˆλ‹€.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰