在 Lodash 中使用模板文字 _.template()

Using Template Literals with Lodash _.template()

我正在尝试使用 Lodash 的模板文字 _.template() 到 select 来自 JSON 文件的消息,该消息基于另一个确定 open/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' }));

如果你想使用模板文字,让它们可重用的方法是将它们包装在 函数 中。例如,您可能有 messages.js:

而不是 messages.json
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'})));