JSXでhover
のイメージを変更する方法
私はこのようなものを試しています:
<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')} />
このコードをReactコンポーネントで記述していると想定します。以下のようになります。
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')}
/>
);
}
}
この場合、this.src
のターゲティングは機能しません。これは、クラスでsrc
という名前のものが本質的に検索されるためです。たとえば、this.src
は次のようなものを見つけることができます。
src = () => (alert("a source"))
しかし、それはあなたがやりたいことではありません。画像自体をターゲットにしたい。
したがって、<img />
コンテキストを入力する必要があります。これは次のように簡単に実行できます。
<img
onMouseOver={e => console.log(e)}
/>
そこから、特にcurrentTarget
プロパティをターゲットにできます。これは要素のコンテキストに入ります。だから今、あなたはこのようなことをすることができます:
<img
src="img1"
onMouseOver={e => (e.currentTarget.src = "img2")}
/>
onMouseOut
についても同じことができます。
あなたは確かにこれを再び行う必要があるので、あなたは他の要素でこれと同じ方法を使うことができます。ただし、これが唯一の解決策ではないので注意してください。大きなプロジェクトでは、ストア( Redux )を使用し、要素を変更するのではなく、小道具を渡すことを検討する必要があります。
最善の方法は、これを次の状態で管理することです。
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>
)
}
};