我正在尝试在我的项目页面(反应 js)投资组合中实施 "Read more" link

I'm trying to implement a "Read more" link in my projects page (react js) portfolio

因此,当用户点击某个特定项目的“阅读更多”时,它应该展开对它的描述。它有效,但每当我点击一个项目的“阅读更多”时,它也会扩展所有其他项目的描述。我只想要被点击的特定项目的描述。

请在下面找到代码片段


                <PortfolioContainer>
                    <SingleProjectContainer>
                        {projectData.map((singleProject)=>{
                        const {title, description, id} = singleProject;
                        const lessDescription = description.slice(0,100) + "....";
                        return (
                            
                                <div className="cardStyled" key={id}>
                                    
                                    <ProjectName>{title}</ProjectName>
                                    
                                    
                                        {readMore ? <ProjectDescription>{description}</ProjectDescription>: <ProjectDescription>{lessDescription}</ProjectDescription>}
                                        
                                    </div>
                                    
                                    <span className="test" onClick={functionToggle}>{readMore ? "read less" : "read more"}</span>
                                    </div>
                                    
                                </div>
                                
                            
                                
                        );
                    })}
                    </SingleProjectContainer>
                    
                </PortfolioContainer>

这是切换功能

const functionToggle = ()=>{
        setReadMore(!readMore);
    }

非常感谢

在您的 map 方法中,readMore 应用于所有循环项目。 您需要在三元运算符中添加另一个案例,以便不仅检查您是否处于阅读更多模式,而且当前标题是否与您需要扩展的文章匹配。

<span className="test" onClick={() => functionToggle(title)}>{readMore ? "read less" : "read more"}</span>

然后向您的状态添加一个新变量

const [ currentFocusedTitle, setCurrentFocusedTitle] = useState(null)

const functionToggle = (title)=>{
        setReadMore(!readMore);
        setCurrentFocusedTitle(title);
    }

然后

 {readMore && currentFocusedTitle === title ? <ProjectDescription>{description}</ProjectDescription>: <ProjectDescription>{lessDescription}</ProjectDescription>}