我在rails项目中使用了react / redux。所以我希望我的列表组件是伪装者(服务器端渲染),而其他组件只是在鼠标悬停在列表项上时显示细节。
鼠标悬停事件
我的问题是当鼠标悬停在每个列表项上时,如何获取详细信息组件的列表数据
简单示例
My Code on rails view
= react_component('Listing', { data: @listings }, prerender: true )
= react_component('Detail', { }, prerender: false )
My Code on JS
export default class Listings extends Component {
render() {
return (
<Provider store={store}>
<ListingsWidget />
</Provider>
);
}
}
My Code for Detail
export default class ListingDetail extends Component {
render() {
return (
<Provider store={store}>
< ListingDetail Widget />
</Provider>
);
}
}
答案 0 :(得分:1)
您有一些伪代码,但您有3个组件:Listings
,ListingsItem
和ListingsItemDetail
。您的onMouseOver
中的元素将具有React ListingsItem
属性,该属性将调用您的事件处理程序来设置状态。假设您的ListingsItemDetail
组件位于ListingsItem
范围内,您将检查状态以查看是否应显示ListingsItemDetail
。如果ListingsItemDetail
位于其他地方,那么您将调用作为prop传入的事件处理程序或使用Redux或其他东西设置应显示的ListingsItemDetail
的id。
修改 - 添加了一个部分示例:
const ListItem = React.createClass({
getInitialState() {
return {showDescription: false}
},
handleMouseOver() {
this.setState({showDescription: true})
},
handleMouseOut() {
this.setState({showDescription: false})
},
renderDescription() {
if (this.state.showDescription) {
return (
<ListItemDescription description={this.props.item.description} />
)
}
},
render() {
return (
<div onMouseOver={this.handleMouseOver} onMouseOut={this.handleMouseOut}>
List item title: {this.props.item.title}
{this.renderDescription}
</div>
)
}
})