Также есть стейт значение инпута. Также форма по добавлению нового комментария. Также есть код, который рендерит эти комментарии:
{comments.length ? (
comments.map((item) => {
// здесь нужен useMemo
console.log('update 1')
return (
<Comment key={item.id} comment={item} remove={removeComment} />
)
})
) : (
<Skeleton />
)}
проблема: при КАЖДОМ изменении стейта значение инпута, у меня каждый раз перерисовывается этот массив. то есть я что то пишу в инпута, чтобы добавить комментарий, при этом у меня каждый раз вызывается лог update 1. Как это исправить то ?
https://codepen.io/fatb0yy/pen/KKXxoay?editors=1010
вытащи components.map в отдельный компонент и оберни в memo. Не будет перерисовываться
спасибо, сейчас буду разбираться !!
не должно, если не будет изменять массив
Не забудь функцию в useCallback завернуть
Ту, которая removeComment
я изменяю массив только при добавлении нового коммента: setComments([...comments, { ...comment, id: uuidv4(), date: dateNow }]) а инпут у меня просто управляемый
хорошо, спасибо за помощь
у меня получилось: const CommentsList = memo(({ comments, removeComment }) => { console.log('2') return ( <TransitionGroup> {comments.map((item) => ( <CSSTransition key={item.id} timeout={380} classNames='comment'> <Comment comment={item} remove={removeComment} /> </CSSTransition> ))} </TransitionGroup> ) })
Обсуждают сегодня