在 Lodash 中使用模板文字 _.template()
Using Template Literals with Lodash _.template()
我正在尝试使用 Lodash 的模板文字 _.template()
到 select 来自 JSON 文件的消息,该消息基于另一个确定 open/close 的函数的响应它对我不起作用。
流量:
- 函数通过
opencloseResponse.openclose
对象运行逻辑和 returns open
或 close
(假定工作正常并且未显示在下面的代码片段中)
- 使用 Lodash
_.template()
我将 messages.open
或 messages.close
与用户的名字作为 first_name
- 显示消息文本
没有模板文字的工作示例
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'})));
我正在尝试使用 Lodash 的模板文字 _.template()
到 select 来自 JSON 文件的消息,该消息基于另一个确定 open/close 的函数的响应它对我不起作用。
流量:
- 函数通过
opencloseResponse.openclose
对象运行逻辑和 returnsopen
或close
(假定工作正常并且未显示在下面的代码片段中) - 使用 Lodash
_.template()
我将messages.open
或messages.close
与用户的名字作为first_name
- 显示消息文本
没有模板文字的工作示例
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'})));