0

What I want is that after I push the button, and the useState had refreshed, I want to refresh the content.

Here is my code:

import React, {useState, useEffect} from 'react';
import MessComponents from './messConatiner';


function Conatiner() {
  const [messes, setMesses] = useState([
    {name: "Chater1: ", mess: "Hi", status: "left"},
    {name: "", mess: "Hi!", status: "right"},
    {name: "Chater2: ", mess: "I have some trouble with react...", status: "left"}
  ]);

  function Send(){
    let list = messes;
    list.push({name: "", mess: document.querySelector("input").value, status:             "right"});
    setMesses(list);
    console.log(messes);
    }

  return (
    <div className="container" id="cont">
        <MessComponents messes={messes}/>
        <input className="chat-input" type="text" /> 
        <button onClick={Send}>Send</button>
    </div>
  );
}

export default Conatiner;
Nico Diz
  • 1,484
  • 1
  • 7
  • 20
Laczkó Örs
  • 1,082
  • 1
  • 18
  • 38

1 Answers1

0
  1. whenever you call setMesses() this will automatically re-render. One thing to add is that the function Send should be lowercase, only capitalize components not regular functions.

  2. the problem is that you are trying to directly mutate the array in your statement list.push()

try using this instead of push

let list = [...messes, {name: "", mess: document.querySelector("input").value, status:  "right"} ]
setMesses(list)
Brad Ball
  • 599
  • 3
  • 5