2017-12-03 2 views
1

내 App.js 내가 경로 에 밀어 로그인 폼에서 다음 this.props.history은 정의되지 않은 반응 라우터-DOM을

import React, { Component } from 'react'; import './App.css'; import Continue from './components/Continue'; import Login from './components/Login'; import Table from './components/Table'; import Profile from './components/Profile'; import { BrowserRouter,Switch, Route,Redirect } from 'react-router-dom' function loggedIn() { return !!localStorage.getItem('token'); } class App extends Component { render() { return ( <div className="App"> <BrowserRouter > <Switch> <Route exact path = "/" component ={Login}/> <Route exact path = "/continue" component = {() => loggedIn() ? <Continue /> : <Redirect to="/" />} /> <Route exact path = "/home" component={() => loggedIn() ? <Table /> : <Redirect to="/" />} /> <Route exact path = "/profile" component={() => loggedIn() ? <Profile /> : <Redirect to="/" />} /> </Switch> </BrowserRouter> </div> ); } } export default App; 

을 /이 성공적으로 발생

this.props.history.push('/continue'); 

계속 .

그러나 에서 내가 /홈 같은 방식으로 추진하려고 할 때 계속

this.props.history.push('/home'); 

그것은 내가 loggedIn을 제거하면 오류를

TypeError: this.props.history is undefined

를 throw() 메이크업 로그인 경로로 사용하면 작동합니다.

다른 구성 요소에 소품 내역을 전송하는 방법을 알아 보려면 도움이 필요합니다.

+1

를 사용하여 설치 한 소품-종류의 패키지가없는 경우. 자세한 내용은 여기를 참조하십시오. https://github.com/ReactTraining/react-router/blob/master/packages/react-router/docs/api/withRouter.md –

답변

0
import React, { Component } from 'react'; 
import './App.css'; 
import Continue from './components/Continue'; 
import Login from './components/Login'; 
import Table from './components/Table'; 
import Profile from './components/Profile'; 
import PropTypes from "prop-types"; 
import { BrowserRouter,Switch, Route,Redirect } from 'react-router-dom' 


function loggedIn() { 
return !!localStorage.getItem('token'); 
} 
class App extends Component { 
    render() { 
    const {location} = this.props.location; 
    return (
    <div className="App"> 
     <BrowserRouter > 
     <Switch> 
      <Route exact path = "/" component ={Login}/> 
      <Route 
      exact 
      location={location} 
      path = "/continue" 
      component = {() => 
      loggedIn() ? <Continue /> : <Redirect to="/" />} 
      /> 
      <Route 
      exact 
      location={location} 
      path = "/home" 
      component={() => 
      loggedIn() ? <Table /> : <Redirect to="/" />} 
      /> 
     <Route 
      exact 
      location={location} 
      path = "/profile" 
      component={() => 
      loggedIn() ? <Profile /> : <Redirect to="/" />} 
     />   
     </Switch> 
    </BrowserRouter> 
    </div> 
    ); 
    } 
} 
App.propTypes = { 
    location: PropTypes.shape({ 
    pathname: PropTypes.string.isRequired, 
    }).isRequired 
}; 

export default App; 

당신이 그때 당신은 특별한`withRouter`를 사용하여 내 보낸 구성 요소를 래핑 할 필요가 있다고 생각

npm install --save prop-types 
+0

"위치"를 모두에 추가하십시오 Ishtiaque05

+0

안녕하세요! 조금 설명 할 수 있니? 이 코드를 어디에 둘 것인지 알아낼 수는 없습니다. :(라우터에 const {location}을 놓을 수 없습니다. :) – HelpingHand

+0

전체 코드를 편집했습니다. 위의 해결책이 효과가 있는지 또는 문제가 있는지 확인하고 알려주십시오. 코멘트를 주저하지 마세요 :) 해피 코딩 – Ishtiaque05

관련 문제