Reputation: 338
I'm trying to change an image src using refs instead of document.querySelector, But i can't figure out how to go about it and can't find a tutorial/documentation for it.
<img id='indigo' src={igo} height="134" width="130" />
let img = document.querySelector('indigo');
if(reasultl === 'true'){
img.src = {igo}
}
else{
img.src = {placeholder}
}
Thanks
Upvotes: 4
Views: 19463
Reputation: 2910
in class component:
const imagRef=React.createRef();
in functional component:
const imageRef=useRef();
<img src={igo} ref={imageRef} />
imageRef.current.src = result === 'true' ? {igo} : {placeholder}
However i this can be done without refs, as shown in armans's answer.
import { useEffect, useState } from "react";
import "./styles.css";
export default function App() {
const [loading, setLoading] = useState(true);
const [image, setImage] = useState(
"https://c.tenor.com/I6kN-6X7nhAAAAAj/loading-buffering.gif"
);
useEffect(() => {
if (loading) {
setTimeout(() => {
if (loading) {
setLoading(false);
setImage(
"https://post.healthline.com/wp-content/uploads/2020/08/3180-Pug_green_grass-732x549-thumbnail-732x549.jpg"
);
}
}, 1000);
}
}, [loading, setLoading, setImage]);
return (
<div className="App">
<img src={image} alt="okay" />
</div>
);
}
import { useEffect, useState, useRef } from "react";
import "./styles.css";
export default function App() {
const [loading, setLoading] = useState(true);
const imageRef = useRef();
useEffect(() => {
if (loading) {
setTimeout(() => {
if (loading) {
setLoading(false);
}
}, 1000);
}
}, [loading, setLoading]);
useEffect(() => {
imageRef.current.src = loading ?
"https://c.tenor.com/I6kN-6X7nhAAAAAj/loading-buffering.gif" :
"https://post.healthline.com/wp-content/uploads/2020/08/3180-Pug_green_grass-732x549-thumbnail-732x549.jpg";
}, [loading, imageRef]);
return (
<div className="App">
<img ref={imageRef} alt="okay" />
</div>
);
}
Hope this will help!
Upvotes: 7
Reputation: 19
Instead of changing the source attribute this way you can use react hook's useState. e.g
import {useState} from 'react';
const [source,setSource] = useState("");
if(reasultl === 'true'){
setSource(igo}
}else{
setSource(placeholder)
}
<img id="indigo" src={source} height="134" width="130" />
Upvotes: 1
Reputation: 709
import your images at the top
import image1 from "../your image path/mountain.jpg"
import image2 from "./images/lake.png"
then use the images as variables by adding them to a useState() like Arman said,or coditionaly render the proper image in return()
return (
{"your true/false condition" ? <img src={image1}/> : <img src={image2}/>}
)
dont put the images in public but in src
Upvotes: 0