【发布时间】:2017-08-04 14:08:59
【问题描述】:
我已经建立了一个带有哈希导航的基本反应应用程序。问题是当我单击任何链接以在页面之间导航时,我看到 url 中的哈希值正在正确更改,并且我在我的layour 的render 中添加了一个console.log 以查看它是否被调用,它是,具有正确的this.props.children 值,但是页面没有呈现任何内容。如果我转到任何路线并刷新页面,我会看到呈现了正确的组件,但如果我从那里导航到某个地方,注意到会被呈现,直到我再次刷新。
import React from "react";
import ReactDOM from "react-dom";
import { IndexRoute, Router, Route, Link, hashHistory as history } from 'react-router';
class Layout extends React.Component {
render() {
console.log(this.props, document.location.hash);
return <div>
<div>
<span>LEYAUTI MLEAYTI {Math.random()}</span>
</div>
<div>
{this.props.children}
</div>
<div>
{this.props.params.project}
</div>
</div>
}
}
class CreateProject extends React.Component {
render() {
return <div>
<h1>Create PROEKT</h1>
</div>
}
}
class Projects extends React.Component {
render() {
return <div>
<h1>PROEKTI MROEKTI</h1>
<Link to="/projects/create">New project</Link>
</div>
}
}
ReactDOM.render(
<Router history={history}>
<Route path="/" component={Layout}>
<IndexRoute component={Projects}/>
<Route path="projects/create" component={CreateProject}/>
</Route>
</Router>,
document.getElementById('app-root'));
这是我在几条路线上导航时控制台中发生的情况的视觉效果,但 DOM 保持不变
【问题讨论】:
-
您可能需要在路径前面添加正斜杠 (
/),例如<Route path="/projects/create" -
@Aron 路由似乎工作正常,但是我尝试了您的建议,但效果不大。问题出在渲染部分,因为我的组件被正确传递了。
-
那么问题来了,虽然路由改变了,渲染函数运行了(因为你可以看到console.log),但是在你刷新之前页面没有任何变化?
-
@Aron 是的,我看到在第一次打开的任何路线上加载的初始页面。
-
从这里很难看出为什么它不起作用。我建议创建一个 JSFiddle 来展示问题,以便我们可以尝试以这种方式进行调试。
标签: javascript laravel reactjs