Continuando a série sobre ReactJS. Vamos falar sobre um dos princípios básicos sobre estado(state
) comparando componentes stateless vs. compoenentes stateful. Os dois últimos posts, por exemplo, criamos componentes estáticos(ou stateless
), mas atualmente boa parte das aplicações precisam ter alguma categoria de interação com o usuário.

As informações precisam ser alteradas em tempo real. Uma das bases do React é um conceito de estado, cada componente utilizado tem um estado próprio quando estado muda o React reconstrói a UI sem o dev fazer nenhuma requisição para alterar o DOM.
Tudo que precisamos fazer é especificar onde os dados terão o estado “alterável”. Para isso utilizamos uma função this.setState()
para manter os dados atualizados. Quando ele é chamando, qualquer informação alterada no componente ele chama o método render()
para atualizar a tela.
Criando o primeiro componente Stateful
Até o momento temos apenas componentes Stateless, precisamos transformá-lo num comoponente Stateful. Vamos dar uma olhada neste exemplo:
var TextAreaCounter = React.createClass({ propTypes: { text: React.PropTypes.string }, render: function() { return React.DOM.div(null, React.DOM.textarea({ defaultValue: this.props.text }), React.DOM.h3(null, this.props.text.length) ); } }); ReactDOM.render( React.createElement(TextAreaCounter, {text:"bob"}), document.getElementById('state') );
No exemplo acima, o nosso componente possuí uma textarea
e um título que mostra o tamanho do nosso texto e ele ainda está stateless
. Ele precisa do método ReactDOM
.render, para atualizar as informações quando o usuário edita o valor da caixa de texto. Para isso precisamos manter os dados(estado) e saber quando eles serão alterados, vamos ver o exemplo atualizado:
var TextAreaCounter = React.createClass({ propTypes: { text: React.PropTypes.string }, getInitialState: function() { return { text: this.props.text, }; }, _textChange: function(ev) { this.setState({ text: ev.target.value }) }, render: function() { return React.DOM.div(null, React.DOM.textarea({ value: this.state.text, onChange: this._textChange }), React.DOM.h3(null, this.state.text.length) ); } }); ReactDOM.render( React.createElement(TextAreaCounter, {text:"bob"}), document.getElementById('state') );
Trabalhando com getInitialState()
Primeiro passo é chamar o método getInitialState()
ele é responsável por salvar o estado inicial do elemento, após adicionarmos o método getInitialState
precisamos definir as ações que iremos tomar quando o nosso componente sofre alguma alteração no seu estado, nesse caso adicionamos uma função “_textChange” ela simplesmente atualizar o estado do elemento com setState
, quando ele for alterado.
No último bloco do nosso componente, dois pontos importantes, agora no value
do nosso textarea
e do nosso h3 não acessamos os props
do nosso componente e sim o estado React.DOM.textarea({ value: this.state.text, ...
e React.DOM.h3(null, this.state.text.length)
outro ponto importante, adicionamos um evento onChange
para disparar a método _textChange.
Agora quando alteramos o nosso componente ele atualiza os dados. Então o objetivo é fazer posts curtos com mais frequência, todos os tutoriais de react estão no meu git: https://github.com/fellyph/react-tutorial
Deixe um comentário