2017-02-09 17 views
1

我有这个问题的反应,我有这个功能,但它不是正确的格式反应reactjs的语法错误:网址为只读

check(img) { 
     console.log(img,typeof img) 
     const url=""; 
     const arrN = ["15","16","35","36","37","38","39","40","n15","n16","n35","n36","n37","n38","n39","n40"]; 
     for (var i = 0; i < arrN.length; i++) { 
      if (img === arrN[i]) { 
       url = "/blah/allIcons/blah"+img+"_en.png"; 
      }else{ 
       url = "/blah/allIcons/blah"+img+".png"; 
      } 
     } 
     return url; 
    } 

它给我这个errror

Module build failed: SyntaxError: "url" is read-only 

我可怎么办它呢?

+1

也许使用已定义'url'以上。只需使用'url =“”'而不是'const url =“”'; –

+0

@AdnanUmer非常不好的建议。我想你不知道为什么声明变量很重要。 – dfsq

+0

const是你不能改变的东西,使用var或let,读取const,var,let之间的差异。 http://stackoverflow.com/questions/762011/whats-the-difference-between-using-let-and-var-to-declare-a-variable –

回答

3

如果更改url变量,则不应将其声明为常量。使用let

check(img) { 
    const arrN = ["15", "16", "35", "36", "37", "38", "39", "40", "n15", "n16", "n35", "n36", "n37", "n38", "n39", "n40"]; 
    let url = ""; 

    for (var i = 0; i < arrN.length; i++) { 
    if (img === arrN[i]) { 
     url = "/blah/allIcons/blah" + img + "_en.png"; 
    } else { 
     url = "/blah/allIcons/blah" + img + ".png"; 
    } 
    } 
    return url; 
} 

但你似乎并不需要它无论如何,作为整个for循环检查显得效率低下。可以优化这样的:

check(img) { 
    const arrN = ["15", "16", "35", "36", "37", "38", "39", "40", "n15", "n16", "n35", "n36", "n37", "n38", "n39", "n40"]; 

    if (arrN.indexOf(img) > -1) { // or if (arrN.includes(img)) {...} 
    return "/blah/allIcons/blah" + img + "_en.png"; 
    } 

    return "/blah/allIcons/blah" + img + ".png"; 
} 
+0

它应该不**被宣布为一个常量:) –

+0

@MayankShukla哈哈,谢谢! – dfsq

0

使用let url="",而不是const url=""

The value of a constant cannot change through re-assignment, and it can't be redeclared.

所以,如果你声明的变量const url="",你不能后来说url="/blah/allIcons/blah" + img + "_en.png"

+0

你能提供更多的信息和详细的答案吗?谢谢 – Robert

+0

@Robert,我用更多的信息和引用更新了我的答案,但是我不会在这里详细解释'let'和'const',因为问题不在于此。 – ivn