【问题标题】:react hooks toggle for specific row反应钩子切换特定行
【发布时间】:2020-11-20 23:58:56
【问题描述】:

请澄清我使用反应钩子切换表格特定行的问题。每当我按下 click.. 它会为每一行打开,默认情况下,表头向右移动,它不是恒定的。

toggleHidden(key) 中的错误。如何更正我的 toggleHidden 功能?

const[isHidden , setIsHidden] = React.useState(true)

const toggleHidden = () => setIsHidden(!isHidden)

const data = [
    {
        "name": "gvf",
        "email": "abc",
        "companyname": "xyz",
        "address": "abcy"
    },
    {
      "name": "abi",
      "email": "dhf",
      "companyname": "dhd",
      "address": "fhfh"
    } 
]
  
     return (
       <div>
        <Row>
          <Col> 
           <table  className="table table-hover table-striped table-sm">
              <thead className="thead-dark">
                 <tr>
                   <th>Name</th>
                   <th>Email</th>
                   <th>CompanyName</th>
                   <th>Address</th>
                  
                 </tr>
                
             </thead>          
      <tbody>  
              
    
                 {data.map((a , key) => (
                   
                    <tr key={a.name}>
                <td><Button onClick = {toggleHidden(key)}>Click</Button>
         {!isHidden && <p>Hello ABIII</p> }
          </td>    
                        <td>{a.name}</td>
                        <td>{a.email}</td>
                        <td>{a.address}</td>
                        <td>{a.companyname}</td>
                     
                    </tr>


                  ))}
              </tbody>
         </table>
    </Col> 
</Row> </div>  

【问题讨论】:

  • 请不要将代码发布到 cmets。 edit 改为问题。

标签: reactjs react-hooks row toggle collapse


【解决方案1】:

您需要定义特定行 - 映射时:

     {data.map(a => (

      )}

尝试像这样为集合中的每个项目添加关键属性:

        {data.map((a, key) => (
 
        ))}

然后传递给您的项目:

 <tr key={key}>

所以现在每一个都是独一无二的——所以如果你把那个键传递给你的函数:

<Button onClick = {toggleHidden(key)}>

程序应该知道执行toggleHidden函数的具体项目

【讨论】:

  • 不建议使用数组索引作为react key,可以像OP已经使用的那样使用a.name
  • 名称可以重复 - 因此 id 不能。为什么不 ?对每个映射项进行排序的检查解决方案? (1,2,3 ... 888, 889, 890) 如果项目没有来自后端的 id 属性,这是唯一的方法。
  • OP 已经在使用name,但没有提及任何反应唯一键警告。请查看React Keys 或特别是in-depth explanation on the negative impacts of using an index as a key
  • 谢谢 - 所以你推荐当 id 不存在时然后在 fe 端生成它们?
  • 是的,当接收包含没有任何保证唯一属性的元素的数组数据时,建议为每个元素生成并添加一个唯一标识符或 GUID,该标识符在数据的生命周期内不会改变渲染。
猜你喜欢
  • 2020-11-21
  • 1970-01-01
  • 2021-04-22
  • 1970-01-01
  • 2022-01-15
  • 2021-07-31
  • 2019-12-08
  • 2022-01-23
  • 1970-01-01
相关资源
最近更新 更多