【问题标题】:How to navigate to another page in react router v4 in the action [duplicate]如何在操作中导航到反应路由器 v4 中的另一个页面 [重复]
【发布时间】:2018-11-23 19:51:58
【问题描述】:

我正在构建一个具有登录屏幕和仪表板的应用程序。当我成功登录时,我希望我的应用程序转到仪表板,但是当我在 ACTION 中调用history.push('/dashboard'); 时(我认为历史推送将在承诺后被调用)。 URL 更改但不呈现视图。

我的登录组件:

onSubmit(values){
    this.props.loginUser(values);
  }
render(){
return(
  <div>
    <form onSubmit={this.props.handleSubmit(this.onSubmit.bind(this))}>
      <Field
        label='Username'
        name='username'
        component={this.renderField}
        type="text"
      />

      <Field
        label='Password'
        name='password'
        component={this.renderField}
        type="password"
      />

      <button type="submit">Login</button>
    </form>
    {this.renderError()}
  </div>
);}}


    function mapStateToProps({profile}){
  return {profile};
}

export default reduxForm({
  validate,
  form:'LoginForm'
})(withRouter(connect(mapStateToProps,{loginUser})(Login)))

我的行动:

export function loginUser(values){
  return dispatch => axios.post(`${ROOT_URL}verifyuser`,values)
    .then((response)=>{
      if(response.data.code == 'success'){

        dispatch(success(response.data),history.push('/dashboard'));
      }else{
        dispatch(failure(response.data));
      }
    })

    function success(response) { return {type:userConstants.LOGIN_SUCCESS,payload:response}; }
    function failure(response) { return { type: userConstants.LOGIN_FAILURE, payload:response } }
}

我的仪表板组件:

class Dashboard extends Component {

  render(){
    return(
      <div>Test</div>
    );
  }
}

我的路线

const App = () => (
  <Switch>
    <Route path="/dashboard" component={Dashboard}/>
    <Route exact path="/" component={Login} />
  </Switch>
)

ReactDOM.render(
  <Provider store={createStore(reducers,applyMiddleware(promise,thunk))}>
    <BrowserRouter>
      <App />
    </BrowserRouter>
  </Provider>
  , document.getElementById('root'));

【问题讨论】:

  • @RIYAJKHAN 没有解决我的问题抱歉
  • 你对 history.push 和 react-router 有信心吗?
  • 是的,我试过了
  • 请查看stackoverflow.com/questions/48799733/…如果仍然无法正常工作请告诉我

标签: reactjs react-router react-redux


【解决方案1】:

如果 url 改变了,那么意味着 history.push 已经起作用了,所以我猜你错过了在你的 Routes 中添加这个路由 添加,

<Route path='/dashboard' component={Dashboard}/>

【讨论】:

  • 您好,我已经编辑了我的代码并将我的路由添加到问题中。我很困惑为什么它不渲染
  • 理想情况下,如果您已经定义了这样的路由,并且当您能够使用 push() 更改 url 时,应该会更改路由中提到的相应组件。你能为此创建一个代码框吗?这将是完美的调试这种情况。
  • 您好,请看这个。 codesandbox.io/s/2ownkp342r
猜你喜欢
  • 2018-07-28
  • 2022-01-20
  • 2017-11-05
  • 2018-01-22
  • 2017-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多