Задать вопрос

Как можно пофиксить этот баг с выводом массива?

Всем привет, возникла проблема, есть код, там есть хук useState, при клике я в состояние добавляю новый объект, вывожу его через console.log, но в консоле логе показывает что он добавился и все норм, а страница как будто не ререндерится, то есть остается старый вывод, а новый не добавляется, хотя в логе показывает, что массив заполнился, в чем может быть проблема?

import {useState} from "react";

function App() {

    const users = [
        {id: 1, title: 'Dima'},
        {id: 2, title: 'Oleg'},
    ]

    const [user, setUser] = useState(users)

    const addUser = (name) => {
        let copy = Object.assign(user)
        copy.push({id: 3, title: name})
        setUser(copy)
        console.log(user)
    }

    const usersList = () => {
        return user.map(user => <div>{user.title}</div>)
    }

  return (
    <div className="App">
        <button onClick={() => addUser(prompt())}>Click me!</button>
        <br/>
        {usersList()}
    </div>
  );
}

export default App;
  • Вопрос задан
  • 51 просмотр
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Мидл фронтенд-разработчик
    5 месяцев
    Далее
  • Javascript.ru
    Курс по React
    5 недель
    Далее
  • Нетология
    Fullstack-разработчик на Python + нейросети
    20 месяцев
    Далее
Решения вопроса 1
Dasihub
@Dasihub
Попробуй это
import {useState} from "react";

function App() {

    const users = [
        {id: 1, title: 'Dima'},
        {id: 2, title: 'Oleg'},
    ]

    const [user, setUser] = useState(users)

    const addUser = () => {
        const name =  prompt()
        setUser({...users,  id: Date.now(), title: name})
    }

    const usersList = () => {
        return user.map(user => <div>{user.title}</div>)
    }

  return (
    <div className="App">
        <button onClick={addUser}>Click me!</button>
        <br/>
        {usersList()}
    </div>
  );
}

export default App;


<button onClick={() => addUser(prompt())}>Click me!</button>


Вот здесь не надо создовать анонимную функцию и через параментр передать данные из prompt, лучше prompt написать внутри функции
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
ITK academy Нижний Новгород
от 50 000 до 90 000 ₽
IT ATLAS Москва
от 200 000 до 250 000 ₽
ITK academy Казань
от 50 000 до 90 000 ₽