我有以下兩個(gè)組件:為了可讀性,我將在這個(gè)問(wèn)題中跳過(guò)imports 和exports資源管理器.jsconst Explorer = () => { const [selected, setSelected] = useState('C'); let dirArr = [ <Program key={"C"} name="C" isSelected={true}/>, <Program key={"D"} name="D" isSelected={false}/> ]; const changeSelection = (newSelection) => { if (selected !== newSelection){ dirArr = dirArr.map((el) => { switch (el.props.name){ case newSelection: case selected: return <Program key={el.props.name} name={el.props.name} isSelected={!el.props.isSelected}/> default: return el } }); } setSelected(newSelection); } const handleClick = (e) => { //TODO: Make sure only <Program> allowed changeSelection(e.target.parentNode.firstElementChild.innerHTML); } return ( <div onClick={handleClick}> {dirArr} </div> ) }基本上我想要做的是,點(diǎn)擊取消選擇上一個(gè)突出顯示的組件并突出顯示新的組件。因此,在mapI'm 翻轉(zhuǎn)isSelected道具上舊selected元素和newSelection return <Program key={el.props.name} name={el.props.name} isSelected={!el.props.isSelected}/>然后這里是Program.jsconst Program = (props) => { const [name, setName] = useState(props.name); const [size, setSize] = useState(0); const [date, setDate] = useState('01.01.75'); const selectedDeterminer = () => { return props.isSelected ? { background: 'blue'} : {} } return ( <div style={selectedDeterminer()}> <section className="program-name">{name}</section> <section className="program-size">{size}</section> <section className="program-date">{date}</section> </div> )}在控制臺(tái)記錄時(shí),我確定我選擇的是元素名稱還是el.props.isSelected正確的名稱,它只是在返回的地圖上,它似乎不會(huì)影響結(jié)果
似乎無(wú)法更改組件的道具
函數(shù)式編程
2021-11-12 17:20:54