我正在学习ES6类的语法。我来自C#背景,所以如果我的术语不正确,我道歉。或者,如果我在做一些看起来很奇怪的事情。
我正在构建一个网络应用程序作为学习练习。它建立在节点和快递上。我有一些路线定义如下:
'use strict';
module.exports = function() {
const app = this;
app.use('/blog', function(req, res) {
console.log('loading blog postings');
res.render('blog', {});
});
app.use('/', function(req, res) {
console.log('looking up: ' + req.path);
res.render('home', {});
});
};
我试图在这些视图后面放置一些视图模型。因此,我有一个名为viewModels
的目录。该目录包含以下文件:
index.js
blog.js
home.js
当前的文件可能不准确,如下所示:
指数js
'use strict';
module.exports = function() {
const HomeViewModel = require('./home);
const BlogViewModel = require('./blog);
};
博客js
export default class BlogViewModel {
constructor() {
this.title = 'My Blog';
}
}
家js
export default class HomeViewModel {
constructor() {
this.title = 'Home';
}
}
我的想法是,我可以使用索引。js
作为定义我的包或名称空间的一种方式。然后,在我的路由代码中,我可以这样做:
'use strict';
module.exports = function() {
const app = this;
const ViewModels = require('../viewModels/index');
app.use('/blog', function(req, res) {
console.log('loading blog postings');
let viewModel = new ViewModels.BlogViewModel();
res.render('blog', viewModel);
});
app.use('/', function(req, res) {
console.log('looking up: ' + req.path);
let viewModel = new ViewModels.HomeViewModel();
res.render('home', viewModel);
});
};
但是,当我尝试此操作时,会出现一些运行时错误,如“错误:找不到模块“../viewModels/index”。这意味着我没有正确设置模块。但是,看起来我是我做错了什么?
事实上,我不确定你想问什么。如果我回答错了,没关系。
首先,你得到错误的原因错误:找不到模块'.../viewModels/index'
是因为你在那里放了两个点。它应该只是一个点意味着从这里开始。然而,我不确定这是否是问题所在。我想问你把路由代码
放在哪里,但是我还没有评论的权限。(啊...堆栈溢出你开玩笑吧...(
其次,下面是在ES6中导出类的正确方法。
例如:
A类。js
'use strict';
//This module can be used within the class. However, you cannot use it in another file.
const AModule = require('AModule');
//The class name used here just for debug output.
module.exports = class AClass {
constructor(startValue) {
//Not like C#. JavaScript does not define private or public.
this.value = startValue;
}
method(incValue) {
this.value += incValue;
AModule(); //Just show you can use this module within the class;
}
}
main.js
'use strict';
//You need to put a ./ before the path if you are include another module made by yourself.
//You do not need it for a npm module.
const AClass = require('./AClass.js');
//Now you just required the class of the AClass, you still need to new one;
var aClass = new AClass(500);
//After new one, you can call its method.
aClass.method(30);
//You can access its property by a dot;
console.info(aClass.value); //530
这是在ES6中创建类的100%工作方式。
以下是详细的文档:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes
不管怎样,JavaScript中的类就像函数一样,函数的原型
将是它的方法。-plhd--0/>(obj,参数)),然后将新对象的构造html" target="_blank">函数属性链接到所使用的函数。
module.exports=xxx就是让xxx成为这个模块的值。例如,如果你module.exports='Hello';
和console.info(需要('模块'));
,你会得到Hello。
你的索引。js
文件不正确,您不能从那里导出ViewModels。将其更改为:
'use strict';
module.exports = {
HomeViewModel: require('./home'),
BlogViewModel: require('./blog')
};
和viewModels它对C#有好处,但对Node没有好处。js。在节点中,它应该只是模型,IMO。
更新:
节点。js并不完全支持所有ES6功能,尤其是新模块声明:https://nodejs.org/en/docs/es6/.应使用标准CommonJs模块声明导出函数:
'use strict';
class HomeViewModel {
constructor() {
this.title = 'Home';
}
}
module.exports = HomeViewModel;
通常情况下你可以用纯JavaScript类定义一个组件: class Greeting extends React.Component { render() { return <h1>Hello, {this.props.name}</h1>; } } 如果你不使用ES6,你可以使用React.createClass来定义: var Greeting = React.create
问题内容: 静态对象是否可以与React中的ES6类一起使用? 当我这样做时,上面的东西给了我未定义的方法 问题答案: 仅适用于。只需将方法声明为静态类方法即可: 关于 您实际上是在对象上创建属性。该属性不会 神奇地 扩展您的组件。
问题内容: 我的印象是分号在ES6中已过时。但是,我今天遇到了这个问题: 不起作用: 作品: 为什么在这里需要用分号?我应该何时使用? 问题答案: 没有分号[1,2,3,4,5,6]将被视为属性访问。JS非常好,我个人认为添加分号没什么大不了的,所以我会继续使用它们。
我有一个安装了ReactJS的NetCore2应用程序。 null VS代码抛出一个错误,告诉我异步只适用于。ts文件。另外,如果我在任何其他函数中使用await,我将得到一个错误,比如。 据我所知,async/await不仅仅是TS...(或者我错了?)。 谢了!
我正在尝试使用模块。导出以创建“全局”函数,我可以在React项目中使用该函数使用Axios进行API调用。 我已经尝试了以下... 这将返回错误…'未定义fetchApi没有未定义 我知道,通常你可以使用导出默认导入和导出组件,但我认为这不是必需的,如果使用module.export. 另外,如果我尝试像这样导入。。。 我得到以下错误...尝试导入错误:'.../.../.../utils/ap
问题内容: 在花了一些时间学习React之后,我了解了创建组件的两个主要范例之间的区别。 我的问题是,什么时候应该使用哪个?为什么?一个人相对于另一个人的利益/取舍是什么? ES6课程: 功能性: 我认为只要没有状态可以由该组件操纵,功能就可以了,是吗? 我猜如果我使用任何生命周期方法,最好使用基于类的组件。 问题答案: 你有正确的主意。如果您的组件只做一些道具和渲染,那么功能就可以了。您可以将它
在花了一些时间学习React之后,我理解了创建组件的两种主要模式之间的差异。 我的问题是什么时候我应该使用哪一个,为什么?一种方法与另一种方法相比有哪些好处/利弊? ES6类: 功能: 我认为只要没有状态可被该组件操纵,就可以正常工作,但就这样吗? 我想如果我使用任何生命周期方法,最好使用基于类的组件。
问题内容: 我使用的是react-router,因此我将组件用于整个应用程序中的链接,在某些情况下,我需要根据用户输入动态生成链接,因此需要类似的内容 ,但无需刷新页面。 我发现了这个小笔记-(https://github.com/rackt/react- router/issues/835 )-我尝试使用,但是上下文有问题… 这导致我(https://github.com/rackt/react