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 'Gray Ghost'), 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进行手风琴式布局