React: ES6 рд╡рд░реНрдЧ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреНрд░реЙрдкреНрд╕

рдХреЛ рдирд┐рд░реНрдорд┐рдд 22 рдЕрдкреНрд░реИрд▓ 2015  ┬╖  40рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: facebook/react

ES6 рд╕рдорд░реНрдерди рдШреЛрд╖рдгрд╛ рдХрд╣рддреА рд╣реИ:

рдХреНрд▓рд╛рд╕ рд╕реНрдЯреЗрдЯ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХрд╛ рдореБрд╣рд╛рд╡рд░реЗрджрд╛рд░ рддрд░реАрдХрд╛ рд╕рд┐рд░реНрдл рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдкреНрд░реЙрдкрд░реНрдЯреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред рдЗрд╕реА рддрд░рд╣ getDefaultProps рдФрд░ propTypes рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЗрд╡рд▓ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЗ рдЧреБрдг рд╣реИрдВред

рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдмрд╣реБрдд рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдХреБрдЫ рдЫреЛрдЯреА-рдЫреЛрдЯреА рд╡рд┐рд╕рдВрдЧрддрд┐рдпреЛрдВ рдкрд░ рдзреНрдпрд╛рди рджрд┐рдпрд╛, рдЬреЛ рдкреБрдирд░реНрд╡рд┐рдЪрд╛рд░ рдХреЗ рд▓рд╛рдпрдХ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред

рдореВрд▓ .createClass рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, getDefaultProps рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдпрд╛ рдЧрдпрд╛ рдорд╛рди рдШрдЯрдХ рдЬреАрд╡рдирдЪрдХреНрд░ рдореЗрдВ рдЕрдиреНрдп рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рди рдХрд┐ рдХреЗрд╡рд▓ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдореИрдВ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ componentWillReceiveProps(props) рдХреЛ рдХреНрдпрд╛ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдореИрдВ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреНрд░реЛрдк рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВред

ES6 рд╡рд░реНрдЧ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдпрд╣ _doesn't_ рдорд╛рдорд▓рд╛ рдкреНрд░рддреАрдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдореБрдЭреЗ рдХреЛрдб рдХреЛ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдореЗрд░рд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ рдЗрд╕рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдпрд╣рд╛рдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

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 рд╡рд┐рдзрд┐ рд╕реЗ рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддрд╛ рдерд╛, рдФрд░ рдпрд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рдФрд░ рдореБрдЭреЗ рдЗрд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдХреНрдпрд╛ рдЕрдирд╛рд╡рд╢реНрдпрдХ рджреЛрд╣рд░рд╛рд╡ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ? рдХреНрдпрд╛ рдХреЛрдИ рдФрд░, рдЕрдзрд┐рдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдЬреИрд╕рд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИ рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореБрдЭреЗ рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рд╣реИ?

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдпрд╣ рд╕рд╣реА рд╣реИред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдЖрдк рдЗрд╕реЗ рд▓рд┐рдЦрддреЗ рд╣реИрдВ:

class Control extends React.Component {

  // ...

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

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

рдХреНрдпрд╛ рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рдХрд╛рд░рдЧрд░ рд╣реИ?

рд╕рднреА 40 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдЬрдм рдХрдВрдкреЛрдиреЗрдВрдЯWillReceiveProps рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреНрд░реЙрдкреНрд╕ рдХреЛ рдкрд╣рд▓реЗ рд╣реА рдорд░реНрдЬ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЬрдм рдХрдВрдкреЛрдиреЗрдВрдЯWillReceiveProps рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреНрд░реЙрдкреНрд╕ рдХреЛ рдкрд╣рд▓реЗ рд╣реА рдорд░реНрдЬ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдореИрдВ рдХрд╣ рд╕рдХрддрд╛ рд╣реВрдВ, ES6 рдХреНрд▓рд╛рд╕ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп getDefaultProps рдХреЛ рдХрднреА рднреА рдХреЙрд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдпрд╣ рд╕рд╣реА рд╣реИред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдЖрдк рдЗрд╕реЗ рд▓рд┐рдЦрддреЗ рд╣реИрдВ:

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 рд╕рд┐рдВрдЯреИрдХреНрд╕ рдирд╣реАрдВ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ; рдЕрдЧрд░ рдореИрдВ рд╕реНрдЯреИрдЯрд┐рдХ рдкреНрд░реЙрдкреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдмреИрдмреЗрд▓ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдЯреЛрдХрди рдлреЗрдВрдХрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдореЗрд░реЗ рдЬреИрд╕реЗ es2015 рдореЗрдВ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдпрд╣рд╛рдВ рдПрдХ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╕рд╛рдорд╛рди рд╣реИред

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

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

}

рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ

@zpao рдХреЗ рд▓рд┐рдВрдХ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдореИрдВ рд╕реНрдерд┐рд░ рдЧреБрдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ ...

@ рдЧреЛрдкреАрдХреГрд╖реНрдг19 рдЖрдкрдХреЛ рдПрдХ рдФрд░ http://babeljs.io/docs/plugins/transform-class-properties/

@zpao рдУрд╣! рдЖрдЬ рдПрдХ рдФрд░ рдирдпрд╛ рд╕рд╛рдорд╛рди :) рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВрдЧреЗ рдХрд┐, рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж!

@ рдЧреЛрдкреАрдХреГрд╖реНрдг 19 рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рдкрд╕рдВрдж рд╣реИ b/c рдореИрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреНрд░реЙрдкреНрд╕ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХреБрдЫ рдкреНрд░реА-рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред рдЗрд╕рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ рдФрд░ рдпрд╣ рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рдФрд░ рдЕрдзрд┐рдХ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рд╣реИ:

....

 static defaultProps = {
      //someDefaultProps
  };

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

....

@fxhereng рджреВрд╕рд░рд╛ рддрд░реНрдХ context рд▓рд┐рдП рдЖрд░рдХреНрд╖рд┐рдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕реЗ рдХреБрдЫ рдХрд╕реНрдЯрдо рдЕрд░реНрдереЛрдВ рдХреЗ рд╕рд╛рде рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рд╕реЗ рдмрдЪреВрдВрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рднрд╡рд┐рд╖реНрдп рдХреЗ рд░рд┐рд▓реАрдЬ рдореЗрдВ рдЯреВрдЯ рд╕рдХрддрд╛ рд╣реИред

рдареАрдХ рд╣реИ @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 рдЬреЛ рдЖрдкрдХреЛ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдбрд┐рдлреЙрд▓реНрдЯрдкреНрд░реЙрдкреНрд╕ рдХреЛ рдкреИрд░реЗрдВрдЯ рдХреНрд▓рд╛рд╕ рдХреЗ рд╕рд╛рде рдЗрдВрд╕реНрдЯреЗрдВрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдореИрдВ рдЙрди рдкреНрд░реЙрдкреНрд╕ рдХреЛ рджреВрд╕рд░реЗ рдЪрд╛рдЗрд▓реНрдб рдХреНрд▓рд╛рд╕ рдореЗрдВ рдкрд╛рд╕ рдХрд░ рд╕рдХреВрдВред

рдХреНрдпрд╛ рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдорд╛рдирдХ es6 рддрд░реАрдХрд╛ рд╣реИ? рдпрд╣рд╛рдВ рдкрд░ рд╕рднреА рд╡рд┐рдзрд┐рдпрд╛рдВ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреА рд╣реИрдВред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдбрд┐рдлреЙрд▓реНрдЯрдкреНрд░реЙрдкреНрд╕ рдХреЛ рдкреИрд░реЗрдВрдЯ рдХреНрд▓рд╛рд╕ рдХреЗ рд╕рд╛рде рдЗрдВрд╕реНрдЯреЗрдВрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдореИрдВ рдЙрди рдкреНрд░реЙрдкреНрд╕ рдХреЛ рджреВрд╕рд░реЗ рдЪрд╛рдЗрд▓реНрдб рдХреНрд▓рд╛рд╕ рдореЗрдВ рдкрд╛рд╕ рдХрд░ рд╕рдХреВрдВред

рдореБрдЭреЗ рд╕рдордЭ рдирд╣реАрдВ рдЖ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдЖрдкрдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИред рдХреНрдпрд╛ рдЖрдк рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛ рд╕рдХрддреЗ рд╣реИрдВ?

рдмреЗрд╢рдХ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИред

рдпрд╣рд╛рдБ рдПрдХ рдШрдЯрдХ рд╣реИ:

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;

рдЬрдм рдореИрдВ рд╡реЗрдмрдкреИрдХ-рджреЗрд╡-рд╕рд░реНрд╡рд░ рдЪрд▓рд╛рддрд╛ рд╣реВрдВ, рддреЛ рдореБрдЭреЗ рдпрд╣ рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ:
Uncaught ReferenceError: props is not defined

рдХреБрдЫ рдРрд╕рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдореИрдВ рдЧрд▓рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдБ...

props рдЖрдкрдХреЗ render() рдкрджреНрдзрддрд┐ рдореЗрдВ рдПрдХ рдЕрдирдмрд╛рдЙрдВрдб рд╡реИрд░рд┐рдПрдмрд▓ рд╣реИред рдпрд╣ <TimerView {...this.props} /> рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЕрд░реЗ рдореЗрд░рд╛ред
рдореИрдВ рдЗрд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЪреВрдХ рдЧрдпрд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЪреВрдВрдХрд┐ рдореИрдВ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдЯреЗрдЯрд▓реЗрд╕ рдШрдЯрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдмрд╕ рдЗрд╕ рдкрд░ рднреНрд░рдорд┐рдд рд╣реЛ рдЧрдпрд╛ред

рдзрдиреНрдпрд╡рд╛рдж рдорд╣реЛрджрдпред

рдХреЛрдИ рдмрд╛рдд рдирд╣реАрдВ @jeanmichelcote! рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ :)

рдбрд┐рдлреЙрд▓реНрдЯрдкреНрд░реЙрдкреНрд╕ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп рдкреНрд░реЙрдкреНрд╕ рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд░рдирд╛ рдПрдХ рдПрдВрдЯреА-рдкреИрдЯрд░реНрди рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ?

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 = { /* ... */ };

рдпрджрд┐ рдЖрдк рдХреНрд░рд┐рдПрдЯ рд░рд┐рдПрдХреНрдЯ рдРрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдпрд╛ рдпрджрд┐ рдЖрдк рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд╕рд╛рде рд╕рд╣рдЬ рд╣реИрдВ рдФрд░ рд╡рд░реНрдЧ рдЧреБрдгреЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИрдВ, рддреЛ рдЖрдк рдпрд╣ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

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 рд╣реИрдВрдбрд▓рд░, рдЬреЛ рдХреЛрдб рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ, рдХреЛ рд╕рдВрджрд░реНрдн рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд░реЗрдбрдХреНрд╕ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдкреЙрдкреНрдпреБрд▓реЗрдЯ рдХрд┐рдП рдЧрдП рдкреНрд░реЛрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдореЗрд░реЗ рд▓рд┐рдП рдЗрд╕ рдХреЛрдб рдХреЛ рдЕрдореВрд░реНрдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╕рдВрджрд░реНрдн рдХрд╛ рдЙрдкрдпреЛрдЧ рдореВрд▓ рд╡рд░реНрдЧ рдХреЗ рдкреНрд░реЙрдкреНрд╕ рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдореИрдВ рдЬреЛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рд╡рд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╡рд┐рд░реЛрдзреА рдкреИрдЯрд░реНрди рдирд╣реАрдВ рд╣реИ (рдпрд╛ рдХрдо рд╕реЗ рдХрдо рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдирд╣реАрдВ рд╣реИ) рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдФрд░ рддрд░реАрдХрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ?

рдореБрдЭреЗ рдЙрдореНрдореАрдж рдереА рдХрд┐ рдореИрдВ рдХреБрдЫ рдРрд╕рд╛ рдХрд░ рдкрд╛рдКрдВрдЧрд╛

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

рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ред

@roberttod рдХреНрдпрд╛ рдЖрдкрдХреЛ рдЕрдкрдиреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓рд╛? рдзрдиреНрдпрд╡рд╛рдж

рдореИрдВ рдПрдХ рдЕрдиреБрд╡рд░реНрддреА рдкреНрд░рд╢реНрди рдкреВрдЫрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ,
рдЕрдЧрд░ рдореИрдВ рдХреНрд░рд┐рдПрдЯ рд░рд┐рдПрдХреНрдЯ рдРрдк (рд░рд┐рдПрдХреНрд╢рди-рд╕реНрдХреНрд░рд┐рдкреНрдЯ 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 рдареАрдХ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЬрдм рдбрд┐рдлрд╝реЙрд▓реНрдЯрдкреНрд░реЙрдкреНрд╕ рдХреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

static defaultProps = {
}

рдХрдХреНрд╖рд╛ рд╡рд┐рдзрд┐рдпреЛрдВ рд╕реЗ рдЗрд╕реЗ рдХреИрд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░реЗрдВ:

this.defaultProps

undefined рд▓реМрдЯрд╛рддрд╛ рд╣реИ

@majioa рдореИрдВ рдЙрд╕ рд╡рд░реНрдЧ-рд╕реНрддрд░реАрдп рдПрдкреАрдЖрдИ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдирддрд╛, рд▓реЗрдХрд┐рди рдПрдХ рд╡рд┐рдЪрд╛рд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреНрд░реЛрдк рдХреЛ рдПрдХ рдЕрд▓рдЧ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдХреИрд╢ рдХрд░рдирд╛ рдФрд░ рдЙрд╕рдХрд╛ рд╕рдВрджрд░реНрдн рджреЗрдирд╛ рд╣реИред рддреБрдо рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реЛ?

@majioa

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

рдореИрдВ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реВрдВ, рдЖрдкрдХреЛ рдмреЗрдмреЗрд▓ -рдкреНрд▓рдЧрдЗрди-рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдо-рдХреНрд▓рд╛рд╕-рдЧреБрдг рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП

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

рдлрд┐рд░ "transform-class-properties" рдХреЛ .babelrc . рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ

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

рд╕реНрдЯреЗрдЯрд┐рдХ рдбрд┐рдлреЙрд▓реНрдЯрдкреНрд░реЙрдкреНрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ () {
рд╡рд╛рдкрд╕реА {
рдХрд╛рд░: "рдорд░реНрд╕рд┐рдбреАрдЬ"
}

@ рдЖрд░реНрдо 7107 рдпрд╣ рдЕрдХреНрд╖рдо рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╣рд░ рдмрд╛рд░ рдПрдХ рддрддреНрд╡ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ

MyComponent.defaultProps = {
  // ...
}

рдпрд╛ рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рд╕реНрдерд┐рд░ рд╡рд░реНрдЧ рдЧреБрдг рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:

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

  // ...
}

(рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдПрдХ Babel рдкреНрд▓рдЧрдЗрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА)

Google рдкрд░рд┐рдгрд╛рдореЛрдВ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд╡рд╛рд▓реЗ рдФрд░ рдЧрд▓рдд рд╕реБрдЭрд╛рд╡реЛрдВ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд▓реЙрдХ рдХрд░ рджреВрдВрдЧрд╛ред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

trusktr picture trusktr  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

zpao picture zpao  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

kocokolo picture kocokolo  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

jimfb picture jimfb  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

framerate picture framerate  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ