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

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

Всем привет, возникла проблема, есть код, там есть хук 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 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Нетология
    Frontend-разработка на React
    10 недель
    Далее
  • ProductStar
    Разработка на React
    6 недель
    Далее
  • Яндекс Практикум
    React-разработчик
    3 месяца
    Далее
Решения вопроса 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 написать внутри функции
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы
от 250 000 до 300 000 ₽
ITK academy Нижний Новгород
от 50 000 до 90 000 ₽
ITK academy Екатеринбург
от 50 000 до 90 000 ₽