Comment changer une image sur hover
dans JSX
J'essaie quelque chose comme ça:
<img src={require('../../../common/assets/network-inactive.png')}
onMouseOver={this.src = require('../../../common/assets/network.png')}
onMouseOut={this.src = require('../../../common/assets/network-inactive.png')} />
Je suppose que vous écrivez ce code dans un composant React. Tels que:
class Welcome extends React.Component {
render() {
return (
<img src={require('../../../common/assets/network-inactive.png')}
onMouseOver={this.src = require('../../../common/assets/network.png')}
onMouseOut={this.src = require('../../../common/assets/network-inactive.png')}
/>
);
}
}
Ciblage this.src
ne fonctionnera pas dans ce cas car vous recherchez essentiellement quelque chose nommé src
dans votre classe. Par exemple this.src
pourrait trouver quelque chose comme ceci:
src = () => (alert("a source"))
Mais ce n'est pas ce que tu veux faire. Vous souhaitez cibler l'image elle-même.
Vous devez donc saisir le <img />
le contexte. Vous pouvez le faire facilement comme ceci:
<img
onMouseOver={e => console.log(e)}
/>
De là, vous pouvez cibler la propriété currentTarget
, entre autres. Cela entrera dans le contexte de votre élément. Alors maintenant, vous pouvez faire quelque chose comme ça:
<img
src="img1"
onMouseOver={e => (e.currentTarget.src = "img2")}
/>
La même chose peut être faite pour onMouseOut
.
Vous pouvez utiliser cette même méthode sur vos autres éléments, car vous devrez certainement recommencer. Mais attention, ce n'est pas la seule solution. Sur des projets plus importants, vous voudrez peut-être envisager d'utiliser un magasin ( Redux ) et de passer des accessoires plutôt que des éléments mutants.
Le mieux est de gérer cela dans l'état:
class App extends Component {
state = {
img: "https://i.vimeocdn.com/portrait/58832_300x300"
}
render() {
return (
<div style={styles}>
<img
src={this.state.img}
onMouseEnter={() => {
this.setState({
img: "http://www.toptipsclub.com/Images/page-img/keep-calm-and-prepare-for-a-test.png"
})
}}
onMouseOut={() => {
this.setState({
img: "https://i.vimeocdn.com/portrait/58832_300x300"
})
}}
/>
</div>
)
}
};