簡體   English   中英

與Lodash _.template()一起使用模板文字

[英]Using Template Literals with Lodash _.template()

我正在嘗試將模板文字與Lodash的_.template()以根據另一個函數的響應從JSON文件中選擇一條消息,該函數確定打開/關閉並且對我不起作用。

流:

  • 函數運行邏輯並通過opencloseResponse.openclose對象返回openclose (假定正在工作,並且未顯示在下面的代碼片段中)
  • 使用Lodash _.template()我以用戶的名字作為first_name放置messages.openmessages.close
  • 顯示消息文本

沒有模板文字的工作示例

messages.json

{
  "messages": {
    "open": "Hello ${ first_name }! We are open!",
    "closed": "Hello ${ first_name }! We are closed!"
  }
}

app.js

const _ = require('lodash');
const { messages } = require('messages.json');

const sendMessage = _.template(messages.open);
console.log(sendMessage({ first_name: 'Jeremy' }));

output

Hello Jeremy! We are open!

模板文字失敗的示例

messages.json

{
  "messages": {
    "open": "Hello ${ first_name }! We are open!",
    "closed": "Hello ${ first_name }! We are closed!"
  }
}

app.js

const _ = require('lodash');
const { messages } = require('messages.json');

const sendMessage = _.template(`messages.${opencloseResponse.openclose}`);
console.log(sendMessage({ first_name: 'Jeremy' }));

output

messages.open

我希望它缺少一些簡單的東西。 整天都讓我發瘋。 感謝您的幫助!

您不需要模板文字。

只需使用方括號[]表示法即可訪問message屬性

const sendMessage = await _.template(messages[opencloseResponse.openclose]);

Lodash的模板和JavaScript的模板文字完全不同。 如果要繼續使用這些JSON文件,則不會使用JavaScript的模板文字,而只需使用動態屬性訪問即可:

const sendMessage = _.template(messages[opencloseResponse.openclose]);
console.log(sendMessage({ first_name: 'Jeremy' }));

如果要使用模板文字,使它們可重用的方法是將它們包裝在functions中 例如,而不是你的messages.json ,你可能有一個messages.js

exports.messages = {
  "open": (first_name) => `Hello ${ first_name }! We are open!`,
  "closed": (first_name) => `Hello ${ first_name }! We are closed!`
};

然后

const messages = require('./messages');

console.log(sendMessage(messages[opencloseResponse.openclose]('Jeremy')));

或者,如果您願意,可以讓函數像Lodash代碼一樣接受對象:

exports.messages = {
  "open": ({first_name}) => `Hello ${ first_name }! We are open!`,
//         ^----------^-------------------------------------------------- destructuring
  "closed": ({first_name}) => `Hello ${ first_name }! We are closed!`
//           ^----------^------------------------------------------------ destructuring
};

然后

const messages = require('./messages');

console.log(sendMessage(messages[opencloseResponse.openclose]({first_name: 'Jeremy'})));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM