2016-01-05 3 views
0

У меня есть относительно простой фрагмент, который был написан в JSX/ES6.React TextArea Component - Как использовать getInititalState() в ES6?

import React from 'react' 

class TextArea extends React.Component { 
    constructor(props) { 
    super(props); 
    } 
    render() { 
    return (
     <div> 
     <textarea defaultValue={this.props.text}></textarea> 
     <h3>{this.props.text.length}</h3> 
     </div> 
    ) 
    } 
} 

TextArea.propTypes = { 
    text: React.PropTypes.string 
} 


export default TextArea; 

Поскольку этот класс не был создан с React.createClass, пытаясь добавить getInitialState результатов в большом красном предупреждении консоли:

Внимание: getInitialState был определен на TextArea, равнина JavaScript класса. Это поддерживается только для классов, созданных с помощью React.createClass. Вы имели в виду определить государственную собственность?

Как правильно использовать getInitialState() в классе ES6?

ответ

3

В конструктор класса необходимости установить state свойство

constructor(props) { 
    super(props); 
    this.state = { } 
} 

Example

+1

Недавно изучающий React Я наткнулся на эту цитату: [* НИКОГДА не мутируйте this.state напрямую, так как вызов setState() впоследствии может заменить мутацию, которую вы сделали. Относитесь к this.state, как если бы он был неизменным *] (https://facebook.github.io/react/docs/component-api.html). Затем я прочитал [this] (https://facebook.github.io/react/docs/reusable-components.html#es6-classes) о классах ES6 :) – CodingIntrigue

1

Для государства вы бы просто добавить this.state = {} внутри constructor. Примером может быть:

constructor (props) { 
    super(props); 
    this.state = { 
     placeHolder: 'Type your stuff here!' 
     }; 
    } 

По умолчанию реквизита, вы должны использовать TextArea.defaultProps. Примером может служить:

TextArea.defaultProps = { 
    placeHolder: this.state.placeHolder 
}; 

Это выходит за пределы вашего класса, так же, как вы проверили свою проверку.

Смежные вопросы