const [imageList, setImageList] = useState();
const getImageApi = async () => {
let res = await axios.get('서버주소');
setImageList(res.data);
};
useEffect(()=>{
getImageApi();
}, []);
서버로 Java Spring을 사용했다고 가정한다. Java에서는 Blob 데이터를 바로 Binary로 응답보내는 것이 아니라, Blob to String 작업을 거친 뒤에 응답을 보낸다. 따라서 클라이언트단에서 String to Base64 작업을 해줘야 한다.
<div>
{
imageList && imageList.map((item, idx) => {
let convertedCode = Buffer.from(item, "base64");
return (
<img
key={`image-${idx}`}
style={{ maxWidth: "100%", height: "auto" }}
src={`data:image/;base64,${convertedCode}`}
alt={`image-${idx}`}
/>
);
})
}
</div>
const [clickedImage, setClickedImage] = useState({
item: "",
convertedCode: "",
});
const onClickImage = (item) => {
let convertedCode = Buffer.from(item, "base64");
setClickedImage({item: item, convertedCode: convertedCode});
};
<div>
{
imageList && imageList.map((item, idx) => {
return (
<img
key={`image-${idx}`}
style={{
maxWidth: "100%",
height: "auto",
filter: clickedImage.item === item ? "grayscale(0%)" : "grayscale(100%)"
}}
src={`data:image/;base64,${item}`}
alt={`image-${idx}`}
onClick={()=>{
onClickImage(item);
}}
/>
);
})
}
</div>