如何在React中的组件之间移动

时间:2018-06-14 20:19:06

标签: javascript reactjs

import React, { Component } from 'react'
import Head from './Head'
import Popular from './Popular'
import Movie from './Movie'
import Search from './Search'

class Flix extends Component {

constructor() {
    super()

    this.state = {
        id : 0,
    }
}

fetchDetails = (id) => {
this.setState({id : id})
}

render() {

    var dialogue //this is an array which I pass to Head

    if (this.state.id === 0) {
        return (

            <div>
                <Head subHeading={dialogue} />
                <Search />
                <Popular fetchDetails={this.fetchDetails}/>
            </div>

        );
    } else {
        return (

            <div>
                <Head subHeading={dialogue} />
                <Search/>
                <Movie id={this.state.id} />
            </div>

        );
    }
}
}

export default Flix;

所以,正在发生的事情是,热门会显示一系列热门电影,当用户点击一部电影时,它会重新显示这些电影。该电影的内容将传递给电影以显示有关所点击电影的更多信息。

这个整个系统工作和onclick我得到关于那部电影的更多细节,但我实现这个的方式是,在开始id = 0所以,显示流行电影和onclick id更改为某些数字,而不是根据显示电影详细信息。

我为此使用了简单的if语句。

我的问题是因为没有后退按钮如何实现一种方式,以便在用户获得详细信息后,他想回到流行电影,直到他滚动下来的热门电影列表。基本上就像一个后退按钮。

此时浏览器上的后退按钮不起作用。

2 个答案:

答案 0 :(得分:4)

在显示详细信息时获取窗口的偏移量,并将其保存到tate,例如:

this.setState ({
   scrollOffset: window.scrollTop
})

然后一个按钮(或一个链接或你想要的任何组件)和onClick绑定一个简单的函数来执行此操作:

handleButton = () => {
    this.setState({
        id: 0 
    });
    window.scrollTo(0, this.state.scrollOffset);
}

答案 1 :(得分:2)

如果您希望能够使用后退按钮,最好通过实施反应路由器(特别是react-router-dom,如果这是基于Web的)来实现。这是当前版本的一个很好的教程:https://medium.com/@pshrmn/a-simple-react-router-v4-tutorial-7f23ff27adf。然后,您可以根据浏览器路径设置状态。

填写对您的网址的实际更改可能比您想要的更加雄心勃勃,但它确实打开了其他可能性,例如将个别结果固定,同时仍将您的应用保持为单页应用。