Stateless vs Stateful

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

As informações precisam ser alteradas em tempo real. Uma das base do React é um conceito de estado, cada componente utilizado tem uma 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 um component Stateless, precisamos transforma-lo em um elemento Stateful. Vamos dar uma olhada neste exemplo:

No exemplo acima, 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:

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 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 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

Wordcamp Europe first day recap

I finished my first experience as a volunteer in an IT event outside Brazil. Now I can say – It was amazing. Wordcamp Europe was a huge event with more than 1500 people from different nationalities. A crazy thing about Europe, here is easy to find different nationalities anywhere, imagine in a huge event like that. Many different cultures in a short distance if we compare it to Brazil. But sometimes language is not a real problem most of then speak english. It is possible speak with, Polish, German, Dutch, Finnish…

It is time

On Friday at 7:30AM some volunteers were there waiting to the doors open, some of them knew each others, because two days before happened some warm up events. When they opened the doors to us, we got the last instructions to start to work in the event: where the stages were, what our tasks were etc…. At 8:30AM the doors WERE opened for attendants. The same problem about registration happened in any WordCamp around the world, a huge group arrived at the same time and we needed to make the things go quickly. But always before the first lecture the groups were inside the event. This moment reminded of WordCamp São Paulo.

9:30AM I STARTED to WORK: door guard. What I need to do? Things like: Pass instructions about the Stage, informations about the schedule, show the directions to other stages and close the door when the place is full. Easy? A little. It was good because I started to speak a lot, I enjoyed the time to practice my english during two hours, The plan was to stays there only one hour, but the time passed by and I didn’t notice. When I finished I got another task: to organise the vegetarian line to the lunch. And my last task was inside the Swag station.

The lectures

After my work I could watch one lecture about Calypso the new react WordPress API, Matias presented this lecture, I met him in my first WordCamp São Paulo. The second lecture that I saw was with Erica she talked about the duties and challenges of being a “Happiness Engineer”.

The first day was little hard. When I arrived there I was tired because I went to another trip before and started working in sequence, the first day I needed to know many things about the event, many new words, new friends. But I love Wordcamps and this made things easier.

I was a Wordcamp organiser and volunteer in Brazil for a long time and the feeling is the same in another country, the first minutes when the people started to arrive, at the same time I started to think about all the things we need to do the best event, I started to feel the adrenaline to make things work.

Trabalhando com shortcodes no WordPress

Vamos falar sobre shortcode nesse post, mas antes vou contar uma história para vocês. Semana passada me deparei com um problemas, daqueles que você só enxerga em produção. Desenvolvendo um tema para um freela, tudo ok no ambiente de teste. Quando o site foi para produção nenhum vídeo carregava.

Entrei para verificar o conteúdo, nele tinha uma tag video.

quando bati o olho pensei duas coisas ou é um shortcode antigo ou é algo do jetpack. Primeiro passo, verificar os plugins se estão ativos, em seguida atualizar o WP, por fim atualizar o Jetpack. Resultado nada!

Você faz aquele exercício o que foi que eu fiz antes “desabilitei o tema anterior” quando fui olhar o código do tema antigo estava lá o shortcode video. Shortcode é um recurso muito útil para que está criando um tema ou plugin. Mas se está criando um short code para o tema ele deve ser totalmente vinculado ao tema, ou seja, um recurso que só faça sentido existir naquele tema ou plugin.

Exemplo, a tag vídeo estava presente em todos os posts mudou o tema, quebrou todo o site. Para alguns recursos hoje em dia não faz muito sentido, um caso é o youtube basta colar o link da url no editor visual que o WP já cria um embed. Optar por um recurso do WP independente do tem ou plugin a funcionalidade vai estar lá.

Ok, vamos para a parte legal. Como eu crio um shortcode?

Primeiro temos que adicionar em nosso function.php o seguinte hook:

add_shortcode( $tag , $func );

Ele espera dois parâmetros, nome da tag e a função que ele irá chamar na prática ele vai ficar da seguinte forma:

Exemplo acima criamos o shortcode “hello” quando a shortcode api encontrar a tag [hello] dentro do meu post saberá que tem que chamar a função say_hello, basicamente ela cria um html como o texto olá meu nome é “x”. Notem que concateno com um valor que passamos como parâmetro na função.

Ela espera que passamos um atributo nome, por exemplo, [hello nome="ze"]. Mas se caso o usuário não passar o valor o que vai acontecer ? ZICA!

Mas podemos definir um atributo default para resolver este problema:

No caso usei um exemplo simples só montar um texto p. Mas poderíamos montar um componente de share, um componente de sugestão de produtos, o componente de publicidade. Lembrando que o recurso fica atrelado ao tema ou plugin, quer saber mais? Também adicionei uma versão em português no codex do WordPress: https://codex.wordpress.org/pt-br:Function_Reference/add_shortcode

WordCamp Europa

No final de junho entre os dias 24 e 26 acontece o WordCamp Europa o principal WordCamp na região com mais de 2 mil participantes esse ano o evento acontece em Viena capital da Áustria. Esse será o meu segundo WordCamp na europa já que meu primeiro foi em Londres logo nos primeiros meses que cheguei aqui.

Foi legal ver outras comunidades e notar que a comunidade brasileira é bem forte e com um alto nível técnico comparada as palestras que eu vi. A única diferença que eu ví no WordCamp Londres é o números de empresas que investem no evento. Isso deixa mais fácil você montar uma super estrutura com: legendas em tempo real, quatro auditórios, buffet ultra organizado com opções vegana, happy hour. Mas esse detalhe me da mais orgulho porque conseguimos fazer WordCamps de qualidade em diferentes estados.

Mas vamos falar o que interessa, logo quando cheguei fiquei de olho nos WordCamps selecionei alguns que poderia participar, fiz um levantamento sobre custo, grade e país que queria muito visitar. Não sei se todo mundo sabe mas estou passando por uma fase de estudante/mochileiro então meus recursos são limitados. Não posso sair viajando toda a europa então a escolha tem que ser feita a dedo.

É claro que o principal evento não poderia ficar de fora dessa lista. Primeira barreira foi a inscrição, estamos falando do principal evento  da Europa, ou seja, as inscrições acabaram em segundos. Entrei em contato com a organização, contei toda a história que sempre participo e palestro em WordCamps, ajudei na organização do WordCamp São Paulo por 3 anos e gostaria muito participar. A resposta foi melhor que esperava fui convidado para participar como voluntário.

Agora é só aguardar e fazer as malas, já foram passadas as primeiras instruções precisamos chegar um dias antes para alinhar as informações nada diferente que fazemos no Brasil, a única diferença é a quantidade de participantes de diferentes países.

O WordCamp Europa serão 3 dias de muito conhecimento com palestras divididas nos seguintes temas comunidade, desenvolvimento, negócios, design e conteúdo. Nos dias 24 e 25 serão o dia dedicado a palestras no dia 26 é o contributor Day, um dia reservado para contribuição com a plataforma.

palestrantens-wordcamp-europa

Agenda Completa aqui: https://2016.europe.wordcamp.org/schedule/

Quer acompanhar o evento? Ainda restam vagas para assistir o LiveStreaming:https://2016.europe.wordcamp.org/tickets/

Vou postar coisas no meu twitter(@fellyph) e snapchat(fellyphc) no dia do evento só acompanhar lá.

Pensando em React

Um dos pontos importantes na hora de aprender React é trabalhar no modo que ele espera a “componentização” do conteúdo, esse processo inicia a partir da construção dos mocks.

Passo 1 – Iniciando como um mock

Imagine que você tem a seguinte tela:

mock-portfolio

Como criaríamos componentes com esse mock?

No caso acima temos uma coleção de portfólio, um componente job, com: foto, descrição, url, empresa, Design, e tecnologias. Vamos considerar que toda esta coleção está em um JSON:

E o nosso componente básico é o seguinte:

componente-mock

Seguindo essa estrutura inicialmente nosso componentes com suas hierarquias serão os seguintes:

  • PortifolioList
    • PortifolioItem

Por que falamos em hierarquias? No caso podemos ter componentes que carregam outros componentes, mas isso não impede de outros elementos carregarem o mesmo componente.

Passo 2 – Construindo uma versão estática com React

No post anterior, trabalhamos com “React.createClass” nesse tutorial vamos utilizar um cara chamado “React.Component” ele trabalha de uma forma diferente com ele criamos um classe que estendem de React.Component lembrando que para trabalhar com classes precisamos do babel para rodar o nosso ECMAScript 2015 e o React. Vamos começar pelo item mais básico o PortfolioItem, primeiramente considerando o mock que construímos o seguinte HTML:

Agora vamos passar o nosso HTML para o um componente:

Apenas adicionei o PortfolioItem com HTML estático só para mostrar como funciona o React.Component, notem que trocamos a propriedade class por className isso é necessário para não termos conflitos com a palavra reservada class, mas as informações estão estáticas precisamos carregar as informações dinamicamente, a cada chamada do componente ele precisa ter uma informação diferente, então vamos lá:

No código acima utilizamos o “{}” para especificar que é uma variável dinâmica this.props. acessa os parâmetros que foram passado para o componente, nesse caso chamamos o componente da seguinte forma:

Assim o atributo nome passado no componente acessamos dentro do componente {this.props.nome}, nosso exemplo completo com PortfolioItem e PortfolioList fica da seguinte forma:

No código acima adicionei o JSON como uma constante do nosso componente o ideal que essas dados venha de alguma API. Na sequência leio o JSON e crio um array com componentes PortfolioItem e no render eu apenas passo o array que montamos {jobsList}. Por fim chamamos o ReactDOM.render passando o PortfolioList como o elemento que iremos adicionar o componente.

O nosso HTML fica da seguinte forma:

Podemos organizar melhor o nosso componente PortfolioList, podemos adicionar funções para organizar o seu comportamento, como no código abaixo:

Na atualização do componente adicionamos uma função “_getJobs” responsável para carregar os trabalhos, separamos a lógica de ler os dados da lógica de renderizar os dados. Também usei alguns recursos novos do ECMAScript2015.

Podemos evoluir esse post, mas pretendo ir evoluindo estes exemplos em outros posts, por isso adicionei um repositório no git: https://github.com/fellyph/react-tutorial

Por que REACT JS?

React JS é o assunto do momento no Brasil e Europa, nos EUA já faz sucesso a mais de um ano o framework do Facebook apenas confirma sua força este ano. React é a tecnologia chave requisitadas nas principais vagas de front aqui na Europa tirando o espaço do Angular ainda bastante forte. Como parte do meus estudos vou traduzir alguns artigos e tutorias que ando lendo. O primeiro deles é uma breve introdução vou utilizar como base o “Why React?” e “Getting Started“.

Por que React ?

React é uma biblioteca javascript para criar interfaces do Facebook e Instagram. O React foi criado para resolver o problema: Criar largar aplicações com dados que mudam a cada segundo.

Simples

Simplesmente expressar como sua aplicação deve olhar para qualquer ponto no tempo, e React vai automaticamente administrar todas atualizações da sua interface quando seus dados mudam.

Declarativo

Quando os dados mudam, React conceitualmente dispara o botão “refresh” e sabe quando atualizar os dados que mudaram.

Construindo ambiente “componentizável”

React é todo construído sobre componentes reutilizáveis. Na verdade, com React a única coisa que você precisa é construir componentes. Uma vez que eles são encapsulados, componentes podem fazer seu código reutilizável, “testável” e com fácil separação de interesses.

Iniciando os trabalhos

Primeiramente vamos baixar o “Starter Pack”, nesse pacote possui as versões prebuilt do React e React DOM para o seu browser, como também uma coleção de exemplos para o seu estudo. Então depois que baixar e descompactar o zip com o starter pack, temos a seguinte estrutura:

Screen Shot 2016-06-10 at 5.54.08 PM

Vamos criar o nosso primero arquivo helloworld.html na pasta raiz.

O exemplo acima foi retirado da documentação, vamos explicar alguns pontos. para executar o React precisamos de três arquivos básicos react.js , react-dom.js e o browser.min.js(babel). Adicionamos uma div com id “example” na linha seguinte adicionamos uma tag script com o type “text/babel” esse parâmetro é utilizado pelo Babel.

Para quem não conhece ele é um compilador genérico multifuncional de JavaScript. “What?” Compliquei? na real ele compila as versões mais recentes do JavaScript(ES2015 e ES2016) e React para uma versão que rode nos browsers atuais. Se quiser saber mais dá uma conferida no link: https://github.com/thejameskyle/babel-handbook/blob/master/translations/pt-BR/user-handbook.md#toc-introduction

Dentro da tag script podemos ver uma mistura de javaScript com HTML essa syntax é conhecida como JSX, no exemplo acima utilizamos uma função que renderiza o JSX “ReactDOM.render” ela recebe dois parâmetros: o nosso código JSX e o elemento que iremos adicionar o código renderizado(O h1 com hello world).

Claro esse é um exemplo de introdução, não é obrigatório o código JSX ficar dentro do html podemos criar um arquivo js separado sem problemas.

Exibindo os dados

A utilização mais básica em uma interface é exibir algum dado. O foco do React é facilitar essa tarefa e manter as interfaces atualizadas em tempo real quando os dados mudam.

Vamos criar uma segundo exemplo com alguma interação.

No exemplo acima criamos um componente classe utilizando a função “React.createClass” temos e várias maneiras de criar componentes e cada caso tem uma particularidade, no caso do createClass passamos um objeto como parâmetro e o atributo render possui um JSX como valor. Isso não determina que o JSX será compilado nesse momento. Apenas deixa pre-definido o que será “renderizado” quando chamarmos o componente “Relogio” mais a frente dentro do nosso JSX temos um ponto importante “{this.props.date.toTimeString()}” as chaves especifica que esse item é uma variável no caso quem chamar o componente precisa passar o atributo “date”.

Após o createClass temos um setInterval que irá chamar a cada 500 milisegundos ReactDOM.render e chamamos o componente que criamos anteriormente e passamos um parâmetro date. Se tudo e correr bem teremos em nossa tela o texto:

Olá, são exatamente: XX:XX:XX(hora atual)

Se quiser saber mais sobre React da uma conferida na documentação: https://facebook.github.io/react/index.html

Próximo Post irei abordar mais esse ponto de criar componentes e o modo de pensar no conteúdo utilizando React.

Meu Primeiro dia na Irlanda

Numa manhã de quinta-feira às 6:40 o despertador toca, levanto para o meu primeiro dia na Irlanda, tomo café ponho minha roupa às 7:30 desço a Parnell Street sentido O’Connel Street, olho para as pessoas na rua, vejo um casal que se despede e tomam sentidos opostos, talvez vão para o seus respectivos trabalhos. Ando mais alguns metros e cruzo uma moça oriental com um carrinho de bebê toda atabalhoada, dou um sorriso sem resposta, nada fora do normal orientais as vezes são bem fechados.

Chego na O’Connel Street uma das principais ruas, olho para o The Spire aquela estrutura metálica no meio da cidade sempre contrastando com toda aquela arquitetura antiga, numa manhã relativamente quente com seus 14 graus sigo para meu destino. Observo algumas pessoas se arriscando com menos casacos, penso “realmente começou a primavera”. Cruzo o rio Liffey e sempre olho para o prédio da Heineken que sempre me passa uma mensagem ousada e desafiadora estar justamente no meio da terra da Guinness.

Às 7:50 chego ao meu destino o prédio da imigração Irlandesa. Sim! “Hoje é o dia” de tirar meu visto de estudante, a fila já contornava o quarteirão quase com uma volta completa, vou caminhando tentando achar o final da fila e começo a escutar vários idiomas russo, português e espanhol. Olho para toda aquela turma bem compactada tentando fugir do vento frio. Às 8:00 a fila começa a andar, cada vez mais ansioso.

Após 40 minutos pego minha senha de número 171, com um leve sorriso me dou conta que algumas piadas só fazem sentidos em locais específicos nesse caso, para nós brasileiros. O atendente confere meus documentos e pede para voltar às 14:00 da tarde.

number 171

Vou para escola mas foi quase possível estudar, tento me concentrar mas só tenho cabeça para resolver a questão do meu visto. Os minutos vão se arrastando, uma hora minha classmate começa a brincar perguntando se eu não tinha dormido na noite anterior, respondo que vou resolver uma questão que já estava incomodando a algum tempo. Não aguento a aula terminar peço para sair meia hora antes da aula terminar sigo pra casa para almoçar antes de voltar na imigração.

Pego um cartão de débito com meu amigo Caio para pagar o meu visto, já que ainda não tenho conta no banco. Caio também me ajudou a comprovar os 3mil euros um processo meio complicado aqui na Irlanda que tinha falado no post anterior (consegui comprovar o valor depositando na conta do Caio e retirando um Bank Draft). Com o cartão em mãos, sigo para a imigração chegando lá a fila já estava no número 151. Trinta minutos depois minha senha é chamada e um atendente simpático pede os documentos necessários e o pagamento do visto no valor de 300 euros, lembrar que este valor só pode ser pago com cartão de débito irlandês. Tiro minhas digitais e sou avisado que tenho que aguardar o meu GNIB (o Visto de estudante). Às 18h saio do prédio da imigração com minha carteirinha e menos 100 quilos das minhas costas.

Que não acompanhou os posts anteriores, já estou na Irlanda a mais de um mês e durante esse tempo os bancos e governo mudaram as regras para abrir conta em banco, isso acabou prejudicando os estudantes que chegam no país sem nenhum comprovante de residência, foi mais de um mês tentando, entender as novas regras, varias tentativas de abrir uma conta no banco e achar uma alternativa para tirar o GNIB. As regras para estudantes na Irlanda estão ficando cada vez mais restritas, mas essa nova regra tinha relação com os problemas de lavagem de dinheiro. A solução veio por conta própria, a agência Global não ajudou em nada, a escola ATC também bem perdida pouco se mexeu para dar uma solução.

A sensação de quando peguei o GNIB foi que a minha viagem tinha começado naquele momento. Resolvido essa questão poderia apenas me preocupar com os estudos, pegar um emprego part-time, poderia viajar para qualquer lugar e garantir minha estadia por 8 meses. Após sair da imigração, fui encontrar meus classmates em um pub muito legal chamado The Breazen Head, conversando com meus colegas todos tinham a mesma sensação da experiência do antes e depois do GNIB. Assim a noite terminou com muitas gargalhadas, pints e músicas.

pup