Добавление объекта в массив (с помощью Hooks in React) - PullRequest
0 голосов
/ 17 октября 2019

Я хочу добавить объект в массив в React с помощью хуков, я делаю чат и хочу добавить новое сообщение в массив сообщений,

Я пробовал это:

setMessages([...messages, newMessage]);

Вот еще код:

const [messages, setMessages] = useState(false);

useEffect(() => {
    socket.open();

    loadMessages();

    return () => {
      socket.close();
    };
  }, []);

useEffect(() => {
    socket.on("send message", data => {
      setMessages([...messages, data]);
    });

    socket.on("delete message", data => {
      setMessages(messages.filter(message => message.id !== data.id));
    });
  });

async function loadMessages() {
    try {
      const dataMessages = await axios.get(
        `http://localhost:5000/api/chat/messages`
      );
      setMessages(dataMessages.data);
    } catch (error) {
      console.log(error);
    }
  }

но я получил TypeError: "сообщения не повторяются" ,

может кто-тоПомоги мне? спасибо!

Ответы [ 3 ]

2 голосов
/ 17 октября 2019

Используйте более подходящее значение по умолчанию (того же типа):

const [messages, setMessages] = useState([]);

Тогда вы всегда сможете распространяться messages.

1 голос
/ 17 октября 2019

Это происходит потому, что начальное значение сообщений является логическим, и вы не можете распространить его в массив новых сообщений.

Попробуйте:

const [messages, setMessages] = useState([]);
1 голос
/ 17 октября 2019

Вы устанавливаете сообщения как логическое значение. Измените это

const [messages, setMessages] = useState(false);

на

const [messages, setMessages] = useState([]);

Затем добавьте элементы в массив, также не изменяйте массив сообщений.

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...