如何使两个组件在React-Redux上相互连接

时间:2016-10-13 16:56:54

标签: javascript ruby-on-rails reactjs redux react-redux

我在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>
    );
  }
}

1 个答案:

答案 0 :(得分:1)

您有一些伪代码,但您有3个组件:ListingsListingsItemListingsItemDetail。您的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>
        )
    }
})