2

I am trying to use history.push method in my redux react app. Its working fine but the problem is my component won't change, do you guys know why?

route.js:

import { BrowserRouter as Router, Route, Switch } from 'react-router-dom'
import { history } from '../helper/history'

export default class route extends React.Component {
  render() {
    return (
      <Provider store={store}>
        <Router history={history}>
          <Switch>
            <Route exact path="/login" component={Login} />
            <Route path="/error" component={Error} />
          </Switch>
        </Router>
      </Provider>
    )
  }
}

Redux action.js where a history is called, this is where I dispatch my actions:

export const loginRequest = () => {
  return {
    type: userType.LOGIN_REQUEST,
  }
}

export const loginSuccess = () => {
  return {
    type: userType.LOGIN_SUCCESS,
  }
}

export const loginFailure = () => {
  return {
    type: userType.LOGIN_FAILURE,
  }
}

export const fetchUser = (data) => {
  return (dispatch) => {
    dispatch(loginRequest)
    axios
      .post(env.API_URL + 'login', { email: data.email, password: data.password })
      .then((res) => {
        dispatch(loginSuccess(res.data.user))
        history.push({
          pathname: '/profile',
        })
      })
      .catch((err) => {
        dispatch(loginFailure(error))
      })
  }
}
Ajeet Shah
  • 12,593
  • 7
  • 43
  • 60

1 Answers1

1

As you are providing history props, you should use Router. See this, Router and BrowserRouter:

import { Router, Route, Switch } from 'react-router-dom'

instead of

import { BrowserRouter as Router, Route, Switch } from 'react-router-dom'

Ajeet Shah
  • 12,593
  • 7
  • 43
  • 60