您需要保持selectedPack处于父组件的状态,如:
const [selectedPack, setSelectedPack] = useState();
和
focusHandler
应在单击时更新此状态。
父母亲
App.js
将类似于:
import * as React from 'react';
import { useState } from 'react';
import './style.css';
import Child from './Child';
const data = [
{
title: 'title one',
pack: 'one',
image: 'https://dummyimage.com/640x360/fff/aaa',
imageSelected: 'https://dummyimage.com/640x360/ccc/aaa',
},
{
title: 'title two',
pack: 'two',
image: 'https://dummyimage.com/640x360/ddd/aaa',
imageSelected: 'https://dummyimage.com/640x360/fff/eee',
},
{
title: 'title three',
pack: 'three',
image: 'https://dummyimage.com/640x360/fff/bbb',
imageSelected: 'https://dummyimage.com/640x360/aaa/aaa',
},
];
export default function App() {
const [selectedPack, setSelectedPack] = useState();
const focusHandler = (pack) => {
setSelectedPack(pack);
};
return (
<div>
{data.map(({ image, title, imageSelected, pack }) => {
return (
<Child
key={pack}
pack={pack}
image={image}
imageSelected={imageSelected}
title={title}
currentlySelected={selectedPack === pack}
focusHandler={focusHandler}
/>
);
})}
</div>
);
}
Child.js会像:
import * as React from 'react';
import './Child.css';
const Child = ({
title,
pack,
image,
imageSelected,
currentlySelected,
focusHandler,
}) => {
const focus = currentlySelected ? 'focus' : '';
const imageSrc = currentlySelected ? imageSelected : image;
return (
<div className="box" onClick={() => focusHandler(pack)}>
<p className={focus}>{title}</p>
<img src={imageSrc} />
</div>
);
};
export default Child;
This stackblitz
是此用法的一个工作示例。