Criando um aplicativo de blog usando o React, parte 2: inscrição do usuário

Nesta série, pretendemos criar um blog usando componentes funcionais do React.

Na primeira parte deste tutorial, vimos como implementar a funcionalidade de login. Agora, vamos para a funcionalidade de inscrição.

Começando

Vamos começar clonando o repositório GitHub da primeira parte do tutorial.

1
git clone https://github.com/tutsplus/create-a-blogging-app-using-react

Depois que o diretório for clonado, navegue até o diretório do projeto e instale as dependências necessárias.

1
cd my-blog
2
npm install

E, você deve ser capaz de ver o aplicativo em https://localhost:3000

E, o servidor expresso deve estar rodando em http://localhost:5000

O servidor

Anteriormente, vimos como GET dados de login do nosso banco de dados PSQL. No entanto, você tem a liberdade de escolher qualquer banco de dados para construir a tabela de funcionários. MongoDB é outra escolha popular.

Para se inscrever, precisamos postar dados no banco de dados. Para conseguir isso, temos que introduzir o seguinte trecho de código em app.js. O snippet a seguir irá inserir um novo usuário no users mesa. Se algo der errado durante o insertionum error será lançado.

1
app.post('/api/posts/userprofiletodb', (req, res, next) => {
2
    const valores = [req.email, 
3
                    req.pwd]
4
    pool.query(`INSERT INTO users(username, email, pwd, date_created)

5
                VALUES($1, $1, $2, NOW())

6
                ON CONFLICT DO NOTHING`, values,
7
            (q_err, q_res) => {
8
              if(q_err) return next(q_err);
9
              res.json(q_res.rows)
10
    })
11
})

O cliente

Como estamos usando o Functional React Component, useState e useReact nos ajudará a gerenciar o estado do componente.

Capturando valores

Para cada campo do formulário de cadastro, teremos uma variável de estado para escutar suas alterações. Por padrão, esses valores estão vazios.

1
  const [email, setEmail] = useState('')
2
  const [password, setPassword] = useState('')

O e-mail e a senha definidos usando useState deve estar vinculado aos elementos do formulário. Isso pode ser obtido facilmente usando o value propriedade.

1
  type="text" id="inputName" value={email} className="form-control" placeholder="Name" required autoFocus />
2
       

E é importante alterar o valor do estado de e-mail e senha na entrada do usuário. Isso pode ser conseguido usando o onChange propriedade. Quando um usuário insere um valor no campo de e-mail, o handleEmailChange função será chamada e definir o valor do estado de e-mail, usando o setEmail método.

Esta é a parte mais interessante de useState em componentes funcionais do React. O estado é inicializado como um par: uma variável e uma função que pode ser chamada para definir o valor da variável. No nosso caso, email é a variável e setEmail é a função para atribuir um valor ao email.

1
const handleEmailChange = (event) => {
2
    setEmail(event.target.value)
3
}
4

5

6
<input type="text" id="inputEmail" value={email} onChange={handleEmailChange} className="form-control" placeholder="Email" required autoFocus />
7
       

A lógica acima pode ser aplicada ao campo de senha.

1
const handlePasswordChange = (event) => {
2
    setPassword(event.target.value)
3
}
4
  
5
<input type="password" id="inputPassword" value={password} onChange={handlePasswordChange} className="form-control" placeholder="Password" required />
6
        

Validando alterações

Uma das maiores vantagens em usar elementos nativos é a validação.

Quando o tipo do campo de entrada for email, o elemento nativo valida se os dados inseridos são válidos ou não. Por exemplo, se o e-mail inserido for inválido, um pop-up nativo aparecerá quando o usuário clicar no submit botão.

Da mesma forma, podemos fixar o número mínimo de caracteres a serem inseridos em um campo usando o minlength propriedade do elemento de entrada. Essa verificação geraria um erro se o usuário inserisse menos caracteres. Um dos lugares onde podemos usar essa verificação é na senha.

1
 type="password" minlength="8" id="inputPassword" value={password} onChange={handlePasswordChange} className="form-control" placeholder="Password" required />
2
        

Inscrever-se

Se o usuário inseriu os dados corretos, o cadastro post chamada pode ser feita.

Defina um método de inscrição chamado handleSubmit. Dentro de handleSubmit método, fazer uma chamada de método post para o signup Ponto de extremidade da API. Aqui, estou usando a biblioteca Axios para buscar.

1
const handleSubmit = () => {
2
      var data = new FormData();
3
      data.append('email', email);
4
      data.append('pwd', password);
5
      
6
      var config = {
7
        method: 'get',
8
        url: `http://localhost:5000/api/get/userprofilefromdb?email=${email}`,
9
        headers: { 
10
          ...data.getHeaders()
11
        },
12
        data : data
13
      };
14
    
15
    axios(config)
16
      .then(function (response) {
17
        // get access to the return data from the POST API endpoint

18
        const data = response.data
19
        navigate("/landing")
20
      })
21
      .catch(function (error) {
22
        setError(error.message)
23
      });
24
    }

Muitas vezes, os desenvolvedores se perguntam se devem escolher Axios ou fetch para seu aplicativo de página única. Axios costuma ser a escolha comum. Aqui estão algumas razões.

  • Axios é muito mais seguro do que a Fetch API. O Axios vem com proteção contra falsificação entre sites.
  • fetch não é suportado em navegadores IE mais antigos. Isso significa que um polyfill deve ser escrito se for provável que seu aplicativo seja aberto em navegadores mais antigos.
  • Solicitações feitas usando fetch não pode ser abortado.
  • fetch não permite timeouts de solicitação. A lógica de tempo limite deve ser implementada pelo aplicativo do lado do cliente.

A página de inscrição em ação

Com todos esses elementos juntos, você verá o Inscrever-se página conforme abaixo.

Se o endpoint da API retornar uma resposta, o usuário poderá ser redirecionado para o /landing página do blog. E, se o terminal da API gerar um erro, o erro será exibido na tela.

Uma demonstração de trabalho

Aqui está uma demonstração de trabalho no StackBlitz para sua referência.

Embrulhando-o

Nesta parte do tutorial, você viu como implementar o processo de inscrição do usuário. Vimos diferentes tipos de validações, diferentes formas de chamar um endpoint e uma simples mudança no lado do servidor.

Na próxima parte do tutorial, você implementará a funcionalidade de adição de postagem e exibição de página de postagem.

Deixe uma resposta