Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/438.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我得到;没有这种方法”;使用ES6静态函数时_Javascript_Reactjs_Ecmascript 6 - Fatal编程技术网

Javascript 我得到;没有这种方法”;使用ES6静态函数时

Javascript 我得到;没有这种方法”;使用ES6静态函数时,javascript,reactjs,ecmascript-6,Javascript,Reactjs,Ecmascript 6,我正在尝试为我在react native中处理的项目创建一个包含静态函数的“utils”类 我读过关于如何在StackOverFlow中生成静态函数的文章,但由于一些奇怪的原因,它对我不起作用 //utils.js 'use strict' export default { textFormat(args) { var s = args[0]; for (var i = 0; i < args.length - 1; i++) { var

我正在尝试为我在react native中处理的项目创建一个包含静态函数的“utils”类

我读过关于如何在StackOverFlow中生成静态函数的文章,但由于一些奇怪的原因,它对我不起作用

//utils.js
'use strict'

export default {
  textFormat(args) {
      var s = args[0];
      for (var i = 0; i < args.length - 1; i++) {
          var reg = new RegExp("\\{" + i + "\\}", "gm");
          s = s.replace(reg, args[i + 1]);
      }
      return s;
  }
}


//main file
import * as Utils from './utils/utils';
/**
/...
**/
var text = Utils.textFormat(rowData.text, "<Text style={{color:'blue'}}>Hey there</Text>");
//utils.js
“严格使用”
导出默认值{
文本格式(args){
var s=args[0];
对于(变量i=0;i

但我一直收到这样一个错误“Utils.textFormat不是函数”,我做错了什么?

幸好您的工作正常,但我只想添加一个更接近您最初尝试的解决方案,并注意其中的要点

不需要使用
class
导出一堆静态方法。我看不出它将如何为代码增加功能性、易用性或清晰性。事实上恰恰相反,语法看起来比导出普通的旧ES5样式的对象更冗长,当我们将ES6+的甜味融入其中时更是如此


您最初的utils模块示例运行得很好。问题在于进口

由于您只是导出一个默认对象,正确的导入方法是

import Utils from './utils/utils';
没有括号,没有星号,只有导入的默认对象的名称,然后可以像
var text=Utils.textFormat(…)
那样使用

不过,我们可以走得更远。通过抛弃整个“导出一个默认对象”的方法,我们可以充分利用模块系统的功能

utils.js:

现在导出的函数可以像这样使用

import * as Utils from './utils/utils';

var text = Utils.textFormat(rowData.text, "<Text style={{color:'blue'}}>Hey there</Text>");
import {textFormat} from './utils/utils';

var text = textFormat(rowData.text, "<Text style={{color:'blue'}}>Hey there</Text>");
import*作为“/Utils/Utils”中的Utils;
var text=Utils.textFormat(rowData.text,“你好”);
还是像这样

import * as Utils from './utils/utils';

var text = Utils.textFormat(rowData.text, "<Text style={{color:'blue'}}>Hey there</Text>");
import {textFormat} from './utils/utils';

var text = textFormat(rowData.text, "<Text style={{color:'blue'}}>Hey there</Text>");
从“/utils/utils”导入{textFormat};
var text=textFormat(rowData.text,“你好”);

无论你喜欢哪一种。

你在混合链接问题中列出的两种方法,这是行不通的。应该是

// utils.js
export default {
  textFormat(args) {
    var s = args[0];
    for (var i = 0; i < args.length - 1; i++) {
      var reg = new RegExp("\\{" + i + "\\}", "gm");
      s = s.replace(reg, args[i + 1]);
    }
    return s;
  }
}
//utils.js
导出默认值{
文本格式(args){
var s=args[0];
对于(变量i=0;i

//主文件
从“/Utils/Utils”导入Utils;
…
var text=Utils.textFormat(rowData.text,“你好”);

//utils.js
导出函数textFormat(args){
var s=args[0];
对于(变量i=0;i

//主文件
从“/Utils/Utils”导入*作为Utils;
…
var text=Utils.textFormat(rowData.text,“你好”);

(后者更可取)

您可以尝试从“/Utils/Utils”导入Utils吗?
?这应该符合您当前的定义。您没有命名export,但只导出一个对象。@bebraw这样做只会给我textFormat未定义错误。@zerkms谢谢,我不确定我是否理解。我应该换什么?我现在明白我的错误了,谢谢你的回答,我删除了我的我用了你的答案?在
utils.js
中定义类是最好的方法还是更好?@b24不,只使用
class
语法定义静态方法是个糟糕的主意。
// utils.js
export function textFormat(args) {
  var s = args[0];
  for (var i = 0; i < args.length - 1; i++) {
    var reg = new RegExp("\\{" + i + "\\}", "gm");
    s = s.replace(reg, args[i + 1]);
  }
  return s;
}
// main file
import * as Utils from './utils/utils';
…
var text = Utils.textFormat(rowData.text, "<Text style={{color:'blue'}}>Hey there</Text>");