如何使用浏览器后退按钮跳转到Redux状态

时间:2018-02-16 20:15:14

标签: reactjs redux react-router react-router-redux

我是一个反应初学者,我有一个项目使用React Router(4.2.2),Redux和我最近添加了react-router-redux希望它能解决我的问题。我有基于与浏览器后退和前进按钮的交互,其redux存储状态需要更改的组件。

例如,我有一个屏幕,其中包含用户点击的元素的详细信息。如果我使用浏览器后退按钮并导航到历史记录中打开详细信息视图的另一个点,它将仅显示最新的元素信息(由于该商店中的唯一信息)或有时根本没有信息通过。

我认为react-router-redux会帮助我保持这两个同步,但也许我错过了一个可以实现这一目标的步骤。我已经安装了Redux调试工具,我可以在那里看到我想跳转到的状态,但是当用户使用后退按钮时如何启用它?每次查看详细信息页面的URL都是相同的,也许我需要添加一个包含特定信息的哈希标记,但即便如此,我如何在商店中查找正确的信息?

我打开详细信息视图:

<Link to='/activityDetails'>
       <ActivityButton 
           id={this.props.someData.someId}
       />
</Link>

在ActivityButton里面:

openActivityDetails = () => {
    this.props.showActivityDetailsScreen(this.props.id);
};

function matchDispatchToProps(dispatch) {
    return bindActionCreators({
        showActivityDetailsScreen: activityDetailsActions.showActivityDetails
    }, dispatch)
}

render(){
    return (
        <div className={'activity-button'} onClick={this.openActivityDetails}>
            <img
                onClick={this.handleClick}
                src={imgPath}
            />
        </div>
    );
}

1 个答案:

答案 0 :(得分:1)

所以我自己想出来了。基本上你需要做的是在创建状态时设置状态信息,如下所示:

<Link to={{
    pathname: '/activityDetails',
    state: { "activityData": activityData }
}}>
    <ActivityButton 
        id={this.props.someData.someId}
    />
</Link>

然后在课堂上你需要信息ActivityDetails,在我的情况下你可以像这样查询:

 var actData = this.props.location.state.activityData;

或者如果您使用withRouter和历史记录,它也位于以下位置:

const { history: { push } } = this.props;
history.state.state.activityData

我最终删除了react-router-redux,因为没有必要。它在当前路线的状态下进入,但在我的情况下没有用。希望这可以帮助将来的某个人。