React Router v4에서 중첩 된 경로를 얻으려고합니다. 나는이 페이지 https://reacttraining.com/react-router/web/guides/quick-startReact Router v4가 포함 된 중첩 된 경로 - 솔루션
를 참조하고하는 것은 그래서 그들은 어떻게 중첩 된 경로는이 분명히 작동이
import React from 'react'
import {
BrowserRouter as Router,
Route,
Link
} from 'react-router-dom'
const BasicExample =() => (
<Router>
<div>
<ul>
<li><Link to="/">Home</Link></li>
<li><Link to="/about">About</Link></li>
<li><Link to="/topics">Topics</Link></li>
</ul>
<hr/>
<Route exact path="/" component={Home}/>
<Route path="/about" component={About}/>
<Route path="/topics" component={Topics}/>
</div>
</Router>
)
const Home =() => (
<div>
<h2>Home</h2>
</div>
)
const About =() => (
<div>
<h2>About</h2>
</div>
)
const Topics = ({ match }) => (
<div>
<h2>Topics</h2>
<ul>
<li>
<Link to={`${match.url}/rendering`}>
Rendering with React
</Link>
</li>
<li>
<Link to={`${match.url}/components`}>
Components
</Link>
</li>
<li>
<Link to={`${match.url}/props-v-state`}>
Props v. State
</Link>
</li>
</ul>
<Route path={`${match.url}/:topicId`} component={Topic}/>
<Route exact path={match.url} render={() => (
<h3>Please select a topic.</h3>
)}/>
</div>
)
const Topic = ({ match }) => (
<div>
<h3>{match.params.topicId}</h3>
</div>
)
export default BasicExample
하지만 난 클래스 형식으로 변경하고 싶습니다.
그래서 나는
하는 index.js
아래 시도render((
<Router>
<div>
<Route path="/" component={App}/>
</div>
</Router>
), document.getElementById('root')
);
App.js
class App extends Component {
render() {
return (
<div className="container">
<header>
<span className="icn-logo"><i className="material-icons">code</i></span>
<ul className="main-nav">
<li><Link to="/">Home</Link></li>
<li><Link to="/about">About</Link></li>
<li><Link to="/teachers">Teachers</Link></li>
<li><Link to="/courses">Courses</Link></li>
</ul>
</header>
<Route exact path="/" component={Home}/>
<Route path="/about" component={About}/>
<Route path="/teachers" component={Teachers}/>
<Route path="/courses" component={Course}/>
</div>
);
}
}
export default App;
문제는 그 정확한 URL에 내가 링크를 클릭, 그것은 루트 그리고 그것은 작동하지만 내가 직접 URL을 입력하면 GET/about과 같은 URL은 모두 렌더링됩니다. 링크를 클릭하든 직접 입력하든 상관 없습니다. 나는 왜 App
루트가 내가 왜 이해가 안되는 루트를 제외하고 렌더링되지 않는다고 생각하고있다. 그 사람이 왜 그런지 알 수 있습니까?
또한 첫 번째 예제 코드와 같은 match 매개 변수를 사용할 수 있도록 코드를 변환하려면 어떻게해야합니까? 주제에 매개 변수로 일치하는 객체를 복용하고 내가 추측하고 그래서 그 이전 URL을 참조하여 어떤 종류의
솔루션입니다
내가 비디오를 많이 여기에 솔루션을 제공 할거야 좋아 based React Router 튜토리얼은 React Router v4를 다루지 않습니다. 새로운 React Router와 어려움을 겪고있는 멍청이가이 답변을 얻을 수 있기를 바랍니다.
기본적으로 자산 요청으로 클라이언트 측 경로를 구별 할 수 있어야하며 webpack-dev-server
은 완벽한 옵션을 제공합니다.
당신이해야 할 모든
는 항상 서버이 내 참조입니다로부터 응답이 없을 때 index.html을 가리 것이다 webpack.config.js에
devServer: {
port: 3000,
historyApiFallback: {
index:'index.html'
}
}
를 추가합니다. 읽을 때 유용 할 수도 있습니다. https://jaketrent.com/post/pushstate-webpack-dev-server/
하지만 그 노드는 ... 나는 반응을 사용하고 webpack으로 구축하고 있습니다. 그래야 작동하지 않을까요? 예제 코드는 익스프레스없이 작동합니다 – forJ
'Can not GET/about' 오류가 발생하면'/ about'과 일치하는 (서버 측) 라우트 핸들러를 찾고있는 서버가 있습니다. 이것은 URL에 입력 할 때 예상되는 동작입니다. –
아니요 서버로 index.html에 모든 경로를 지정해도 여전히 작동하지 않습니다. 가는 경로가 정의되어 있지 않습니다. – forJ