Reactjs 如何访问React useState中元素的名称

Reactjs 如何访问React useState中元素的名称,reactjs,react-hooks,use-state,Reactjs,React Hooks,Use State,我正在尝试设置一个组件,其中列出了一组标题。每个标题旁边都有一个“+”,当您单击“+”时,另一个组件将显示包含更多信息的组件。我知道如何做到这一点,以便一次只能显示一个组件,但我希望这样做,以便可以同时查看多个组件 这是到目前为止我的代码 import React, { useState, useEffect } from "react"; import MattressUpgrade from "./CamperMods/MattressUpgrade"

我正在尝试设置一个组件,其中列出了一组标题。每个标题旁边都有一个“+”,当您单击“+”时,另一个组件将显示包含更多信息的组件。我知道如何做到这一点,以便一次只能显示一个组件,但我希望这样做,以便可以同时查看多个组件

这是到目前为止我的代码

import React, { useState, useEffect } from "react";

import MattressUpgrade from "./CamperMods/MattressUpgrade";

const CamperModsContainer = () => {
  const [iconType, setIconType] = useState({
    mattressUpgrade: "",
  });

  const [show, setShow] = useState({
    mattressUpgrade: false,
  });

  useEffect(() => {
    setIconType({
      mattressUpgrade: "fas fa-plus-square",
    });
    setShow({
      mattressUpgrade: false,
    });
  }, []);

  let onClickHandler = (event) => {
    event.preventDefault();
    let payload = event.currentTarget;
    toggleShow(payload);
  };

  const toggleShow = (payload) => {
    debugger;
    if (payload.value === true) {
      setIconType.payload.id("fas fa-minus-square");
      setShow.payload.id(true);
    } else if (payload.value === false) {
      setIconType.payload.id("fas fa-plus-square");
      setShow.payload.id(false);
    }
  };

  return (
    <div>
      <h1>Camper Modifications</h1>
      <p>
        As much as we love the Wolf Pup (aka the &apos;Gray Ghost&apos;), there
        are some things that we tweaked...
      </p>
      <div className="flex-row">
        <h3>Mattress Upgrade</h3>
        <button
          type="button"
          id={show.mattressUpgrade.key}
          value={show.mattressUpgrade}
          className={iconType.mattressUpgrade}
          onClick={onClickHandler}
        ></button>
      </div>
      {show === true && <MattressUpgrade />}
    </div>
  );
};

export default CamperModsContainer;
import React,{useState,useffect}来自“React”;
从“/CamperMods/MattressUpgrade”导入MattressUpgrade;
常数CamperModsContainer=()=>{
常量[iconType,setIconType]=useState({
床垫,
});
const[show,setShow]=useState({
mattressUpgrade:错误,
});
useffect(()=>{
setIconType({
床垫升级:“fas fa plus square”,
});
布景({
mattressUpgrade:错误,
});
}, []);
让onClickHandler=(事件)=>{
event.preventDefault();
让有效负载=event.currentTarget;
切换显示(有效载荷);
};
常量切换显示=(有效负载)=>{
调试器;
如果(payload.value==true){
setIconType.payload.id(“fas fa减平方”);
setShow.payload.id(true);
}else if(payload.value==false){
setIconType.payload.id(“fas fa plus square”);
设置show.payload.id(false);
}
};
返回(
露营车改装

就像我们爱狼崽(又名灰鬼)一样,我们也爱它
是我们调整过的一些东西。。。

床垫升级 {show==true&&} ); }; 导出默认的CamperModsContainer;

问题是将id设置为
id={show.mattressUpgrade.key}
不起作用。当我在
开关show
中点击调试器时,我可以访问
payload.value
并获得
false
的值。但是如果我尝试执行payload.id,它会返回一个空字符串,我不知道为什么。

我相信您正在寻找计算属性,但是这里还有其他一些误解值得强调

一般的建议是尽可能保持数据类型的一致性。在字符串和布尔值之间转换很难理解和调试。如果最终在更复杂的数据类型(对象等)之间切换,则很容易出错

第一个问题是,
show.mattressUpgrade.key
不起作用,而且永远不会起作用<代码>键在
show.mattressUpgrade
上作为对象属性访问,但
show.mattressUpgrade
不是对象,它的
false
。您可以展开并运行下面的代码段,查看访问
false
上的属性会产生
undefined
,并将
undefined
指定为输入的
id
会导致
e.target.id
为空字符串

const示例=()=>{
常数测试=假;
console.log('test.property',test.property);
常数handleChange=(e)=>{
console.log(e.target.id)
}
返回
}
ReactDOM.render(,document.getElementById('root'))

我相信您正在寻找计算属性,但这里还有几个值得强调的误解

一般的建议是尽可能保持数据类型的一致性。在字符串和布尔值之间转换很难理解和调试。如果最终在更复杂的数据类型(对象等)之间切换,则很容易出错

第一个问题是,
show.mattressUpgrade.key
不起作用,而且永远不会起作用<代码>键
show.mattressUpgrade
上作为对象属性访问,但
show.mattressUpgrade
不是对象,它的
false
。您可以展开并运行下面的代码段,查看访问
false
上的属性会产生
undefined
,并将
undefined
指定为输入的
id
会导致
e.target.id
为空字符串

const示例=()=>{
常数测试=假;
console.log('test.property',test.property);
常数handleChange=(e)=>{
console.log(e.target.id)
}
返回
}
ReactDOM.render(,document.getElementById('root'))


为什么按钮需要
id
?另外,您希望show.mattressUpgrade.key
是什么?我可以告诉你这里的错误,但我不太明白你的问题代码的目标是什么。你为什么要这样设置状态
setIconType.payload.id
useState
返回一个函数,您只需调用它。当前,每个useState中只有一个元素,
MattressupGrade
。但还会有更多。所以我试图弄清楚如何只升级useState的特定元素。例如,如果在床垫升级旁边单击“+”,我只想更新
usebatt
的状态,而不是
show
useState中的每个元素。为什么按钮需要
id
?另外,您希望show.mattressUpgrade.key是什么?我可以告诉你这里的错误,但我不太明白你的问题代码的目标是什么。你为什么要这样设置状态
setIconType.payload.id
useState
返回一个函数,您只需调用它。当前,每个useState中只有一个元素,
MattressupGrade
。但还会有更多。所以我试图弄清楚如何只升级useState的特定元素。例如,如果在床垫升级旁边单击“+”,我只想更新
UseBatt
的状态,而不是
show
useState中的每个元素。因此我想我的后续问题是,我应该研究什么来找出如何使用React ho进行手风琴式布局