私は反応を覚えていますが、ボタン上にマウスを置くのを待っている画像を覆うように、これは)動作します:React:コンポーネント1の上にマウスを置いて、別のコンポーネントのスタイルを変更します。
class Product extends Component {
constructor(props) {
super(props);
// 1. bind your functions in the constructor.
this.mouseOver = this.mouseOver.bind(this);
this.mouseOut = this.mouseOut.bind(this);
this.state = {
hover: false
};
}
// 2. bind it with fat arrows.
mouseOver =() => {
this.setState({hover: true});
}
mouseOut() {
this.setState({hover: false});
}
render() {
return (
<Link to={"/products/"+this.props.value.uid}>
<button className="Product" onMouseEnter={this.mouseOver.bind(this)} onMouseLeave={this.mouseOut.bind(this)}>
<img className="ImageGrid" src={this.props.value.media}/>
{this.state.hover ? (
<div className="ImageOverlay">
<div className="TextOverlay">
<p><b>{this.props.value.name}</b></p>
<p>${this.props.value.price}</p>
</div>
</div>) : null}
</button>
</Link>
);
}
}
は私の質問です...のではなく、このコンポーネントによってレンダリングされた画像の上にオーバーレイを追加するので、私は別のコンポーネントによってレンダリングされた画像を変更したいことを言わせず、オーバーレイdiv要素を適用することにより、その画像のCSS設定を変更することによって、フィルタを適用するようにすることができます:フィルタ:グレースケール(100%)。したがって、この画像があります:
<img className="PicBox" src={this.state.img[sid-1]} />
別のコンポーネントによってレンダリングされます。ここで
は、私は戦略があるかもしれない考えていますものです:
は、私の元のコンポーネント(私はホバーその上に1)を持って、私はそれの上にカーソルを置くかどうかにトラックを保持小道具「状態」を持っています私が上記のように。
ImageXをレンダリングするもう1つのコンポーネントでは、イメージをレンダリングする方法(グレースケールで表示するかどうか)を決めるために、Hoverコンポーネントのpropにアクセスして状態を確認する必要があります。
他のコンポーネント内でホバーコンポーネントの状態にアクセスするにはどうすればよいですか?
あなたは、このような再来やフラックスとして、いくつかの状態管理するライブラリを使用していないとあなたが必要な、コンポーネント間の状態にアクセスできるようにする限り
あなたはReduxのようなものを使用していますか? – xDreamCoding
2つのコンポーネントの関係は何ですか?親子、兄弟など? – dfsq
@ dfsq - 今、これらは2つのコンポーネント(兄弟)を並べて、共通の親によってレンダリングされています。 – RebeccaK375