【问题标题】:React how to change an individual button in a list反应如何更改列表中的单个按钮
【发布时间】:2021-08-12 01:47:10
【问题描述】:

我有一个从基础渲染内容的列表,每个列表项都有一个“收藏夹”按钮,用于将项目移动到渲染的开头。问题是当我点击“收藏”(星号)按钮时,我不知道如何更改单个元素的图标。

我尝试通过 LocalState 来做,但正因为如此,当我点击一个单独的按钮“添加到收藏夹”时,一切都会立即改变

Before pressing

After

代码

import { useState } from "react"

const WaysItem = (props) => {
    let [change, setChange] = useState(false)
    return props.directionsToRender.map((item, index) => (
        <li
            className={`ways-item`}
            key={index}
            onClick={() => {
                props.getCurrentDirections(index)
            }}
        >
            <div>
                <h5>{item.title}</h5>
            </div>
            <div className="ways-kilometrs">
                <div>{item.direction.routes[0].legs[0].distance.text}</div>
                <div>{item.direction.routes[0].legs[0].duration.text}</div>
            </div>
            <button onClick={() => setChange((change) => !change)} key={index}>
                <i className={`${!change ? "far" : "fas"} fa-star`}></i>
            </button>
        </li>
    ))
}

export default WaysItem

【问题讨论】:

    标签: javascript reactjs button


    【解决方案1】:

    您可以将数组作为状态。并在按钮单击时添加或删除索引。

    import { useState } from "react"
    
    const WaysItem = (props) => {
        let [selectedItems, setSelectedItems] = useState([])
    
        const onButtonClick = (index) => {
           // if index is already there in the selectedItems then remove it
           if(selectedItems.includes(index)){
             setSelectedItems(selectedItems.filter(item => item !== index))
           } else {
            setSelectedItems(prevSelectedItems => [...prevSelectedItems, index]);
           }
        }
    
        return props.directionsToRender.map((item, index) => {
          const showStar = selectedItems.includes(index);
          return (
            <li
                className={`ways-item`}
                key={index}
                onClick={() => {
                    props.getCurrentDirections(index)
                }}
            >
                <div>
                    <h5>{item.title}</h5>
                </div>
                <div className="ways-kilometrs">
                    <div>{item.direction.routes[0].legs[0].distance.text}</div>
                    <div>{item.direction.routes[0].legs[0].duration.text}</div>
                </div>
                <button onClick={() => onButtonClick(index)} key={index}>
                    <i className={`${showStar ? "far" : "fas"} fa-star`}></i>
                </button>
            </li>
        )})
    }
    
    export default WaysItem
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-30
      • 1970-01-01
      • 1970-01-01
      • 2019-10-01
      • 2021-09-16
      • 1970-01-01
      相关资源
      最近更新 更多