我最初的目标要解决:
我有 4 个组件并排排列。我希望能够切换/单击其中一个组件并使其他 3 个组件消失。然后重新切换同一组件以使其他组件重新出现。但也能够通过切换任何其他组件来完成相同的任务。
简单来说,每个组件都是一个 div 标签,其中包含一个图像标签。
我对这个问题的初步看法:
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)时,我将设置选择的编号,如果我单击的div与选择的相同,则将选择重置为零。
每次 selectedNumber 发生变化时,useEffect 都应该检测到它并用 selectedNumber 过滤数组,如果 Choose 为零,则重置 stateArray。
现在,当我单击其中一个组件时,它们都会消失。我只是不确定使用零是否适合用来比较每个对象或我需要使用什么。
守着星空守着你
慕少森
月关宝盒
相关分类