Цикл foreach не работает при использовании хука состояния

При нажатии кнопки я пытаюсь использовать цикл forEach для моего хука состояния использования, который изначально является массивом.

мой крючок:

const [regrowsData, setRegrowsData] = useState([])

мой код кнопки:

<Button variant = "contained" color = "primary" onClick = {() => regenrateRows()}>Add Row</Button>

функция, которая меняет данные хука useSate:

const regenrateRows = () => {
        var newArr = regrowsData;
        newArr.push('newvalue');
        setRegrowsData(newArr);
    }

функция, для которой я хочу, чтобы forEach восстанавливал массив состояний.

var getRows = () => {        
        
            regrowsData.forEach((row) => {
               
                alert(row)
            })
       
    }

Проблема заключается в изменении состояния, не появляется предупреждающее сообщение.

не могли бы вы показать нам, где вызывается функция getRows

VersifiXion 14.12.2020 13:17

Попробуйте использовать map() вместо forEach, у меня всегда работает

Gayatri Dipali 14.12.2020 13:18

return ( <Paper height = "2"> <Button variant = "contained" color = "primary" onClick = {() => regenrateRows()}>Добавить строку</Button> <Table style = {{ overflowX: "scroll ", display: "block" }}> <TableHead> <TableRow> {getColumns()} </TableRow> </TableHead> <TableBody> {getRows()} </TableBody> </Table> </Paper> )

Deb 14.12.2020 13:19
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
1
3
724
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вероятно, это потому, что вы используете изменяемые данные. Попробуйте изменить функцию regenarateRows на это:

const regenrateRows = () => {
        setRegrowsData([...regrowsData, 'newvalue']);
    }

если я хочу обновить состояние только пять раз ..?

Deb 14.12.2020 14:21

Я не понял вопроса... вы хотите ограничить количество кликов по добавлению строк? Если это так, вам, вероятно, потребуется другое состояние для подсчета времени изменения состояния или проверки regrowsData.length перед вызовом setRegrowsData. Кстати, regenrateRows — это опечатка.

Renan Bandeira 14.12.2020 14:36

Вы обновляете ту же ссылку на состояние, поэтому реакция не может найти изменения.

Попробуйте так

const regenrateRows = () => {
     regrowsData.push('newvalue');
     setRegrowsData([...regrowsData]);
}

Другие вопросы по теме