【发布时间】:2015-10-30 08:09:49
【问题描述】:
当谈到 React-Router 组件时,我很笨拙。但是,当我浏览链接时,我无法找到解释为什么我的组件会被卸载?以及如何预防?
在我的示例中,我有一个包含计时器并通过
重新呈现内容的组件我遇到了一个错误:
这是 ReactJS 代码:
/*global define, Backbone, React, $, Request, Router, Route, Link */
var App = React.createClass({
render: function () {
return (
<div>
<h1>App</h1>
<ul>
<li><Link to="/about">About</Link></li>
<li><Link to="/timer">Timer</Link></li>
</ul>
{this.props.children}
</div>
)
}
});
var About = React.createClass({
render: function () {
return <h3>Here is about page</h3>
}
});
var Timer = React.createClass({
getInitialState: function() {
return {counter: 0};
},
render: function () {
return (
<div>
<h2>Time is running over...</h2>
<b>{this.props.interval}</b>
<p>{this.state.counter}</p>
</div>
)
},
componentDidMount: function () {
this.loadCommentsFromServer();
setInterval(this.loadCommentsFromServer, 1000);
},
loadCommentsFromServer: function () {
this.setState({counter: this.state.counter + 1});
}
});
React.render((
<Router location="history">
<Route path="/" component={App}>
<Route path="about" component={About} />
<Route path="timer" component={Timer} />
</Route>
</Router>
), document.body);
【问题讨论】:
-
您希望计时器在整个应用程序中都处于活动状态吗?为什么你有它的具体路线?
-
这只是一个例子。我的主要目标是在浏览链接期间不要卸载组件。在我的真实项目中,我有一个带有巨大网格的复杂组件。所以每次我回到这个组件时,它都会向服务器发送请求以获取数据。但我不需要这样的行为。而且我不明白为什么 React-Router 销毁组件而不是隐藏它?
-
在这种情况下,react-router 的行为符合预期 - 如果您有一个不应卸载的组件,那么您需要将其组合到您的顶级应用程序组件中 - 请参阅下面的答案
标签: reactjs react-router