【发布时间】:2021-03-22 02:47:22
【问题描述】:
我最初要解决的目标:
- 我有 4 个组件并排排列在一起。我希望能够切换/单击其中一个组件并让其他 3 个组件消失。然后重新切换相同的组件以使其他组件重新出现。但也有能力通过切换任何其他组件来完成相同的任务。
- 每个组件简单来说就是一个div标签,里面有一个image标签。
我对这个问题的初步看法:
export const Test = () => {
const intialValue = [{id: 0, component: null}]
const array = [
{id: 1, component: <CompOne/>},
{id: 2, component: <CompTwo/>},
{id: 3, component: <CompThree/>},
{id: 4, component: <CompFour/>}
]
const [chosenNumber, setChosen] = useState(0)
const [statearray, setArray] = useState(array)
useEffect(() => {
console.log(chosenNumber)
const arr = array
if(chosenNumber === 0 ) setArray(array)
else setArray(arr.filter( num => num === chosenNumber))
}, [chosenNumber])
const handleClick = (number) => {
if(number === chosenNumber) setChosen(0)
else setChosen(number)
}
return (
<div className="flex" >
{statearray.map((comp, number) => <div key={number} className="h-12 w-12 bg-gray-400 m-1 flex items-center justify-center" onClick={() => handleClick(comp.id)}>{comp.id}</div>)}
</div>
);
}
我的思考过程是当我点击组件(div)时,我会设置choiceNumber,如果我点击的div与选择的div相同,则将选择重置为零。
每次 selectedNumber 发生变化时,useEffect 都会检测到并使用 selectedNumber 过滤数组,如果选择为零,则重置 stateArray。
现在,当我单击其中一个组件时,它们都消失了。我只是不确定使用零是比较每个对象的正确方法还是我需要使用的方法。
感谢您的帮助!
【问题讨论】:
-
到目前为止你尝试了什么?
-
如果您想获得帮助,请告诉我们您至少尝试通过提供代码 sn-ps 以及您可能遇到的问题自己解决它。我们不会为您解决此问题,但如果您尝试,我们会为您提供帮助。
-
@MantasAstra 我刚刚更新了我的问题。对于我最初写问题的方式,我深表歉意
-
@clod9353 我更新了我的问题。希望这是一种更好的格式。对于开头的措辞,我深表歉意。
标签: javascript reactjs use-state