React如何调用函数取决于特定的元素ID

klr1opcd  于 2022-10-01  发布在  其他
关注(0)|答案(1)|浏览(141)

如何跳过一个函数取决于元素的id。现在,如果我点击任何单个元素,所有元素都会被点击。如何防止显示所有元素?以下是我的代码

  1. const[showsubcat,setShowSubCat] = useState(false)
  2. let subcategory=(()=>{
  3. setShowSubCat(prev=>!prev)
  4. })

我的JSX

  1. {data.map((data)=>{
  2. return(
  3. <>
  4. <li class="list-group-item" id={data.id} onClick={subcategory} >{data.main_category}</li>
  5. {showsubcat &&
  6. <li><i class="las la-angle-right" id="sub_category"></i> {data.sub_category}</li>
  7. }
  8. </>
  9. )

请看屏幕截图。我点击了单个项目,但它显示了所有项目。

b1zrtrql

b1zrtrql1#

每个li都应该有自己的状态,所以要么基于li的数量创建状态,要么最多只有2个元素!但它很难看,当你想增加更多的Li时,它会变得一团糟
因此,您只需创建一个定义ListItem的组件,并且每个组件都有自己的状态。

  1. function ListItem({data}) {
  2. const[showsubcat,setShowSubCat] = useState(false)
  3. const subcategory= ()=> setShowSubCat(prev=>!prev)
  4. return (
  5. <>
  6. <li class="list-group-item" id={data.id} onClick={subcategory} >
  7. {data.main_category}
  8. </li>
  9. {showsubcat &&
  10. <li>
  11. <i class="las la-angle-right" id="sub_category"></i>
  12. {data.sub_category}
  13. </li>
  14. }
  15. </>
  16. )
  17. }

在List组件中使用它,如下所示

  1. data.map((datum, index) => <ListItem key={index} data={datum} />

更新后编辑(误解)

列表项(或包含li和helper文本的块)应该是管理其自身状态的独立组件。

  1. function PostAds(data) => {
  2. return (
  3. <>
  4. {
  5. data.map((data, index) => <ListItem key={index} data {data}/>
  6. }
  7. </>
  8. )
  9. }
  10. function ListItem({data}) {
  11. const [showsubcat, setShowSubCat] = useState(false)
  12. const subcategory = () => setShowSubCat(prev => !prev)
  13. return (
  14. <>
  15. <li
  16. class="list-group-item"
  17. id={data.id}
  18. onClick={subcategory}>
  19. {data.main_category}
  20. </li>
  21. {
  22. showsubcat &&
  23. <li >
  24. <i class = "las la-angle-right" id = "sub_category"></i>
  25. {data.sub_category}
  26. </li>
  27. }
  28. </>
  29. )

}

展开查看全部

相关问题