当前位置: 首页 > 知识库问答 >
问题:

反应路由器4和props.history.push

西门山
2023-03-14

有件事让我发疯,我需要你的帮助。基本上,当用户单击“我的配置文件”时,我想重定向到用户的配置文件。为此,我使用以下代码段

viewProfile = () => {
    console.log('My USER ID: ', this.props.userId);
    this.props.history.push(`/profile/${this.props.userId}`);
}

这应该行得通。但是,尽管当单击我的个人资料时,网址会更改为正确的网址,但页面不会显示。它只是保持旧页面。

谷歌了一会儿,我知道这和redux有关...但是,我找不到解决方案。(this.props.userid来自Layout组件,而Layout组件又从redux商店获取)

这是我的代码:

// React
import React, { Component } from 'react';
import { withRouter } from 'react-router-dom';
// Redux
import { connect } from 'react-redux';
import * as actions from '../../../store/actions/';
// Containers and Components
   ...// more imports

const styles =  // styles

class NavBar extends Component {

  handleAuthentication = () => {
    if (this.props.isAuthenticated) {
      this.props.history.push('/logout');
    } else {
      this.props.history.push('/login');
    }
  };

  viewProfile = () => {
    console.log('My USER ID: ', this.props.userId);
    this.props.history.push(`/profile/${this.props.userId}`);
  };

  render() {
    let buttons = (
      <Auxillary>
        {this.props.isAuthenticated ? (
          <RaisedButton
            label="MY PROFILE"
            primary={true}
            style={styles.button}
            onClick={this.viewProfile} // THIS IS THE METHOD
          />
        ) : null}
        <RaisedButton
          backgroundColor={grey900}
          label={this.props.isAuthenticated ? 'LOGOUT' : 'LOGIN'}
          labelColor={grey50}
          style={styles.button}
          onClick={this.handleAuthentication}
        />
      </Auxillary>
    );

    let itemSelectField = null;
    if (this.props.location.pathname === '/items') {
      itemSelectField = (
        <ItemSelectField
          onSelectTags={tags => this.props.filterItemsByTagName(tags)}
        />
      );
    }
    let bar = null;
    if (
      this.props.location.pathname !== '/login' &&
      this.props.location.pathname !== '/register'
    ) {
      bar = (
        <AppBar
          style={styles.appBar}
          title={itemSelectField}
          iconElementLeft={
            <img style={styles.logoHeight} src={Logo} alt="logo" />
          }
          iconElementRight={buttons}
        />
      );
    }
    return <Auxillary>{bar}</Auxillary>;
  }
}

const mapDispatchToProps = dispatch => {
  return {
    filterItemsByTagName: selectedTags =>
      dispatch(actions.filterItemsByTagName(selectedTags))
  };
};

export default withRouter(connect(null, mapDispatchToProps)(NavBar));

您可以在此处找到整个应用程序:https://github.com/Aseelaldallal/boomtown/tree/boomtown-backend-comm

我都快疯了。帮帮忙。

共有2个答案

柳轶
2023-03-14

您需要集成react-router-redux

在redux进行浅层比较以检查组件是否需要更新时,更新状态似乎没有反映在容器中。

import {Router} from 'react-router-dom';
import { ConnectedRouter, routerReducer, routerMiddleware } from 'react-router-redux';
import createHistory from 'history/createBrowserHistory';

const history = createHistory()
const middleware = routerMiddleware(history)


const rootReducer = combineReducers({
    router: routerReducer,
  //other reducers
});

const store = createStore(rootReducer,applyMiddleware(middleware));

<Provider store={store}>
<ConnectedRouter>
 //routes
</ConnectedRouter>
</Provider>

另外,在reducer中,添加此代码段。

let updatedStore = JSON.parse(JSON.stringify(state));
姜献
2023-03-14

我想这与你使用

import createHistory from 'history/createBrowserHistory';
...
const history = createHistory();
...
<ConnectedRouter history={history}>
...
</ConnectedRouter>

 类似资料:
  • 问题内容: 我需要react-router v2 +的帮助,例如,当路由更改时,我必须更改navbar的类,因为它将 尝试在navbar组件中使用,但它显示 希望你的帮助 问题答案: 您的组件(如您在问题中所描述的)可能不是路由组件,对吗?通过我的意思是你在使用一个被加载特定路由配置。 仅可通过此类访问,因此您需要将其传递给您。 让我们举个例子: 您的路由器配置: 路线部分:

  • 考虑以下事项: 我有一个应用模板,一个HeaderTemboard,和参数化的路由集与相同的处理程序(在应用模板)。我希望在没有找到东西的时候能够服务404路线。例如, /CA/SanFrancisco应该由区域查找和处理,而 /SanFranciscoz应该是404。 下面是我如何快速测试路线的。 问题是 /SanFranciscoz总是由区域页面处理,但我希望它是404。此外,如果我向第一个路

  • 问题内容: 在安装组件之前进行授权检查的最佳实践是什么? 我使用react-router 1.x 这是我的路线 这是我的仪表板组件: 问题答案: 更新了 React Router v4的* 解决方案 * 反应路由器到v3 使用’onEnter’事件并在回调中检查用户是否被授权:

  • 我的导航不工作,因为某些原因,我有另一个应用程序运行良好,但这一个不能找到错误,请帮助 反应路由器不工作。反应JS 我需要你的帮助。 使用react-router,我可以使用Link元素创建由react router本地处理的链接。

  • 我有一个名为Dashboard的父组件,它被呈现为路由,如下所示: 我试着嘲笑每个人在嵌套路由上的解决方案,但我似乎无法解决我的问题。