Инструмент Google Lighthouse дал моему приложению ужасную оценку производительности, поэтому я провел некоторое расследование. У меня есть компонент под названием Home
внутри Home
у меня есть useEffect (только один), который выглядит так
useEffect(() => {
console.log('rendering in here?') // called 14 times...what?!
console.log(user.data, 'uvv') // called 13 times...again, What the heck?
}, [user.data])
Я знаю, что вы указываете второй аргумент []
, чтобы убедиться, что useEffect
вызывается только после изменения данных, но это основная часть, которую я не понимаю. когда я консоль log user.data
, первые 4 консольных журнала представляют собой пустые массивы. следующие 9 - это массивы длины 9. Так что, в моей голове, он должен был вызвать его только дважды? один раз для []
и один раз для [].length(9)
, так что же, черт возьми, происходит?
Мне серьезно нужно уменьшить его, так как это, должно быть, убивает мою производительность. дайте мне знать, если я могу еще что-нибудь сделать, чтобы резко сократить количество обращений
вот как я получаю user.data
const Home = ({ ui, user }) => {
// Я передаю это здесь как опору
const mapState = ({ user }) => ({
user,
})
а затем мой компонент подключен, поэтому я просто передаю его здесь
user.data
- это массив, Array - это ссылочный тип. Поэтому, если вы уничтожите старый массив и создадите новый массив, реакция обнаружит это как изменения. - person Kirill Skomarovskiy   schedule 21.05.2020user.data
, все остальные изменяют либо разные частиuser
, либо разные редукторы. и учитывая, что мой второй аргументuser.data
, я не уверен, почему он перерисовывается? - person Red Baron   schedule 21.05.2020