Giter VIP home page Giter VIP logo

chat_sw's Introduction

Chat Soluções Web

Christian Warmling Medeiros

chat_sw's People

Contributors

chriswarmling avatar

Watchers

 avatar

chat_sw's Issues

font-awesome como dependencia normal

Opa,

Analisando teu package.json vi que o font-awesome está com dependencia de dev ao invés de depencia normal.

},
"devDependencies": {
"font-awesome": "^4.7.0"
}

Recomendo mover para bloco de dependencias normais, já que a mesma será embutida e publicada junto com o build de produção do projeto.

Usar toda a API do React

Opa,

Chris eu gostei muito da tua iniciativa de usar React nessa tarefa, ficou muito bom o teste.

Como sugestão te deixo a missão de sempre tentar usar ao máximo a API do React. Já que já baixou todo o pacote do React, já levantou todo um setup baseado em create-react-app porque não usar ao máximo o poder do React?!

Neste trecho de código consigo ver que estais "misturando" JavaScript puro (baseado em DOM classico/vanilla) com os conceitos de React:

function sendMsg() {
var msg = document.getElementById('msg')
var textMsg = document.createTextNode(`${msg.value}`)
if(msg.value === '') {alert('Escreva Algo')}
else{
var element = document.getElementById('element')
var spanMsg = document.createElement('span')
console.log(msg.value)
spanMsg.appendChild(textMsg)
element.appendChild(spanMsg)}
msg.value = ''
var rolar = document.getElementById("chatbox-scroll");
rolar.scrollTop = rolar.scrollHeight;
}

A idéia do React é trabalhar com states e usar o super-poderoso motor de renderização do React para gerar as mensagens de chat.

Neste link encontra-se o seu projeto "reformulado":

https://codesandbox.io/s/chat-sw-chriswarmling-y83lj?file=/src/App.js

Se tu acessares o link acima irá ver o teu chat funcionando 100% React "puro". E aqui abaixo segue o meu código de sugestão:

import React, { useState, useEffect } from "react";
import TextareaAutosize from "react-textarea-autosize";

import "./App.css";
import "font-awesome/css/font-awesome.css";

function App() {
  // array/lista de mensagens do arquivo do chat
  // variável e método de atualização
  const [chatMsgs, setChatMsgs] = useState([
    { msg: "Olá, em que posso ajudar?", className: "chatbox-bot" }
  ]);

  // mensagem que está sendo digitada neste momento
  // variável e método de atualização
  const [msg, setMsg] = useState("");

  // função responsável por adicionar uma nova mensagem
  // no array/lista de mensagens do arquivo do chat
  function sendMsg(event) {
    event.preventDefault();

    // boa validação...
    if (msg === "") {
      alert("Escreva Algo");
      return;
    }

    // adicionando uma nova mensagem com a classe "chatbox-user"
    setChatMsgs([...chatMsgs, { msg, className: "chatbox-user" }]);

    // limpando o campo de mensagem digitada
    setMsg("");
  }

  // sempre que nova mensagem entrar (ou sair) do array de mensagens
  // a barra de rolagem do chat será atualizada...
  useEffect(() => {
    const rolar = document.getElementById("chatbox-scroll");
    if (!!rolar) rolar.scrollTop = rolar.scrollHeight;
  }, [chatMsgs]);

  // no meio do JSX abaixo existe o bloco em que pegamos
  // mensagem por mensagem do array/lista de mensagens
  // e renderizamos em tela com uma DIV e também sua
  // respectiva classe
  return (
    <div>
      <div className="chatbox">
        <div className="chatbox-title">
          <span>Chat Soluções Web</span>
        </div>
        <div id="chatbox-scroll" className="chatbox-chat">
          {chatMsgs.map((item, k) => (
            <div key={k} className={item.className}>
              <span>{item.msg}</span>
            </div>
          ))}
        </div>
        <div className="chatbox-send">
          <TextareaAutosize
            className="chatbox-input"
            value={msg}
            onChange={event => setMsg(event.target.value)}
          />
          <i className={`fa fa-lg fa-paper-plane`} onClick={sendMsg} />
        </div>
      </div>
    </div>
  );
}

export default App;

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.