7

我從eslint得到prefer-template錯誤。對於解決辦法,我改變了我的代碼以使用require函數嵌套在url函數內部如下內模板字符串:如何在ES6中嵌套模板字符串?

{ 
    background: `url(${require(`../../assets/${edge.node.name.toLowerCase()}.png` center no-repeat`)}) 
} 

然而,這給了一個錯誤,很明顯。這是我之前使用的代碼,在require函數內連接了一個加號,而不是模板字符串。

{ 
    background: `url(${require('../../assets/' + edge.node.name.toLowerCase() + '.png')}) center no-repeat` 
} 

是否可以定義嵌套的模板字符串?

回答

12

是的,這是可能的,但你不得不出於某種原因把)})部分(即關閉require調用,插值和CSS url)在錯誤的地方:

{ 
    background: `url(${require(`../../assets/${edge.node.name.toLowerCase()}.png`)}) center no-repeat` 
//                    ^^^ 
} 

也就是說,這可能是一個糟糕的主意,因爲它不會使代碼可讀。最好使用一個變量:

const bgurl = require(`../../assets/${edge.node.name.toLowerCase()}.png`); 
… { 
    background: `url(${bgurl}) center no-repeat` 
} 
+0

感謝您的回覆。這是我演示的錯誤。但是,當我將它改爲'url($ {require('../../ assets/$ {edge.node.name.toLowerCase()}。png'))center no-repeat'時,這是一個語法錯誤。 – lvarayut

+0

@LVarayut:[Worksforme](http://babeljs.io/repl/#?evaluate=true&presets=es2015&code=const%20x%20%3D%20 {%0A%20%20background%3A%20%60url%28 %24 {需要%28%60%.. .. 2F%2Fassets%2F%24 {edge.node.name.toLowerCase%28%29} png格式%60%29}%29%20center%20no重複%60 %0A}%3B)。你到底在做什麼錯誤? – Bergi

+0

謝謝@Bergi。我對花括號感到困惑。順便說一句,我會用你的第二種方法。 – lvarayut