Вы не можете / не должны делать такого рода вещи без использования состояния где-либо.В этом случае я предлагаю вам разделить код комментария и состояние на отдельный компонент, который может обрабатывать свое собственное расширенное состояние.Затем вы можете использовать состояние для настройки рендеринга и стиля вашего вывода:
import React, { useState } from 'react'
// ... //
const Comment = ({comment:shortDesc = ''})=>{
let splitLength = 400
let shortened = false
const [isExpanded, setIsExpanded] = useState(false)
if (shortDesc.length > splitLength) shortened = true
shortDesc = shortDesc.substring(0, splitLength)
const handleToggle = ()=>{
setIsExpanded(!isExpanded)
}
return (
<div key={i}>
{!isExpanded ? <div>{`${shortDesc}${shortened ? '...' : ''}`}</div> : null}
{shortened && <Button onClick={handleToggle}>{isExpanded?'Less':'More'}</Button>}
</div >
)
}
Используйте этот компонент в вашем отображении следующим образом:
let block = comments.map((comment, i) => <Comment comment={comment} key={i} /> )