【问题标题】:Toggle Font Awesome Icon when clicked in React在 React 中单击时切换字体真棒图标
【发布时间】:2021-06-14 06:29:04
【问题描述】:

我有一个项目列表,每个项目都以“caret-down”图标开头。单击图标时,我将在项目下显示一些内容,并将图标更改为“插入符号”。现在,如果再次单击该图标,它会变回“插入符号”并且显示的内容被隐藏。我正在使用以下内容:

this.state.errors.map((item, index) =>
                            <tr key={index}>
                                <td>
                                    <a className="btn btn-link" onClick={this.caretClickHandler}>
                                        <FontAwesomeIcon icon="caret-down" />
                                    </a>
                                </td>
                                <td>{item.date}</td>
                                <td>{item.administratorEmail}</td>
                                <td>{item.organizationName}</td>
                                <td>{item.customerId}</td>
                            </tr>
)

我想在“caretClickHandler()”中实现切换逻辑。如何实现这样的切换?

【问题讨论】:

    标签: javascript reactjs icons font-awesome


    【解决方案1】:

    您需要使用状态,然后在点击时更新状态。有了这个,您就可以为您的图标使用三元组。

    例如:

    const [isClicked, setIsClicked] = useState(false)
    
    //Never change state directly
    onClick={() => setIsClicked(prev => !prev)} 
    
    <FontAwesomeIcon icon={isClicked ? "caret-up" : "caret-down"} />
    

    【讨论】:

    • 这是否适用于列表中的多个项目,就像我的情况一样?我的意思是它会记住单个列表项的状态吗?
    • 为此,您需要共享更多代码。基本上,如果您通过列表进行映射,然后呈现列表项组件,那么如果每个组件中都有本地“isClicked”状态,它将起作用。否则你是对的,它不会起作用。示例: list.map(item => ) 然后您的 Component.js 将收到道具,这就是您保持 isClicked 状态的地方。用这么少的字符很难在评论中解释,但这有意义吗?
    • 我在上面编辑了我的代码。我正在创建一个从 api 响应获得的数组(此处为“错误”)映射的表。
    • 好的,我会将 tr 标签中的所有内容移动到一个新组件中,然后在该组件中使用 useState。您将获得与当前所做的相同的结果,但每个错误的状态管理将变得更加容易。另一方面,您基本上可以通过 handleClick 上的数组进行映射,如果 index === 到项目的索引,那么您可以更新该项目的特定属性。这里唯一的问题是,如果您在其他任何地方更新状态,您将重新渲染并且更新后的属性将恢复为其原始值。
    • 另一件事,取决于你做什么,索引可能会改变。我会使用 item.customerId 作为密钥。
    猜你喜欢
    • 2019-09-04
    • 2014-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多