【发布时间】:2016-03-30 11:34:06
【问题描述】:
我来自 PHP 背景,是 Node JS 开发的新手。我决定尝试一个基本的 Meteor JS + Iron Router + React 项目。以下行为让我措手不及:
我在一个类似
http://192.168.0.110:3000/dashboard/john的页面上,它有一个类似<a href="/dashboard/john/111222">的链接。当页面首次加载时,客户端 JavaScript 变量myvariable的值为undefined,但我在页面加载时将其设置为myvariable="hello world"。当我点击
<a href="/dashboard/john/111222">链接时,页面会加载,但令我惊讶的是,myvariable的值已经是hello world而不是undefined。
因此,即使我访问了一个全新的 url,我希望在其中刷新整页,myvariable 仍保持前一页的值。由于我的 PHP 背景,我期待值 undefined。
这对我来说是一个全新的行为,因为如果这是一个 PHP 项目,我将不得不显式编写代码以产生客户端 javascript 变量在不同页面 url 之间持续存在的错觉(或者我使用 ajax 重绘屏幕)。但是在我的 NodeJS 项目中,我不必做任何这些,客户端变量保持它的值。
所以我的问题是,这种行为叫什么?是 Node JS、Meteor、Iron Router 还是 React 造成了这种行为?一旦我知道了这种行为的名称,我就可以谷歌并阅读详细信息。
这是我的项目的代码:
我的项目.jsx
var myvariable;
var configAppRoute = {action:applicationController};
Router.route('/dashboard/:username',configAppRoute);
Router.route('/dashboard/:username/:appid',configAppRoute);
function applicationController()
{
console.log(myvariable);
myvariable='hello world';
console.log(myvariable);
Meteor.startup(function () {
ReactDOM.render(<App />, document.getElementById("render-target"));
});
}
App.jsx
App = React.createClass({
render() {
return (
<div>
<a href={'/dashboard/john/111222'}>click me</a>
</div>
);
}
});
我的项目.html
<head>
<title>My Project</title>
</head>
<body>
<div id="render-target"></div>
</body>
【问题讨论】:
-
你能发布带有问题的 myvariable 代码的 javascript 代码吗?
-
这可能是流星做的。流星的原理之一:
Data on the Wire. Meteor doesn't send HTML over the network. The server sends data and lets the client render it——表示基于流星的应用是单页应用。我没有使用过流星,所以我不能 100% 确定,但流星可能会重写您的链接以进行 ajax 调用并将其呈现在同一页面中。这可以解释你所看到的行为。 FWIW 您也可以在 PHP 中执行此操作。 Facebook 就是这样一个用 PHP 编写的应用程序示例。 -
@Tim 我已经更新了代码
-
@slebetman 谢谢。我会研究那个。是的,在 PHP 中,我本来希望编写自己的代码来实现这一点。
标签: node.js meteor reactjs iron-router