ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

javascript – 在模板文字中定义一个函数

2019-08-28 17:35:49  阅读:219  来源: 互联网

标签:template-literals javascript ecmascript-6 reactjs styled-components


我正在使用styled-components作为React样式的解决方案.他们有一个很好的方法,使用模板文字插入CSS.模板文字传递组件的道具,以便您可以执行以下操作:

const PasswordsMatchMessage = styled.div`
    background: ${props => props.isMatching ? 'green' : 'red'};
`

结果是一个组件,它根据isMatching的值呈现带有绿色或红色背景的div标签.以上将通过JSX使用,如下所示:

<PasswordsMatchMessage isMatching={doPasswordsMatch}>...</PasswordsMatchMessage>

每当props的值改变时,该字符串将被重新插值.这终于让我想到了我的问题:

每次插入模板文字时,是否都会重新定义模板文字中定义的箭头函数?

如果是这样,那么我可以考虑在模板文字之外创建函数并且只是传递它们,例如

const PasswordsMatchMessage = styled.div`
    background: ${isMatchingFn};
`

解决方法:

是的,每次插入模板文字时,它都会定义一个新版本的函数.您可以通过定义自己的跟踪先前值的标记来验证.

var previous;
function trackInterpolations(literalParts, interpolated) {
  if (interpolated === previous) {
    answer = 'Got the same function';
  } else {
    answer = 'Got a different function';
  }
  previous = interpolated;
  return answer;
}

然后跑

trackInterpolations`background: ${props => props.isMatching ? 'green' : 'red'};`

几次,并注意到它总是评估为“有不同的功能”,表明它每次都在创建一个新功能.

与此版本相比:

trackInterpolations`background: ${isMatchingFn};`

第一次运行时,它将评估为“获得不同的功能”(因为它还没有看到isMatchingFn),但是如果再评估它几次,它将始终导致“获得相同的功能”,因为函数引用正在重用.

在这种情况下,我不会过分担心性能影响,除非你真的注意到减速,否则请使用更具可读性的东西.与重新渲染div相比,创建新函数的开销不太可能很高.

标签:template-literals,javascript,ecmascript-6,reactjs,styled-components
来源: https://codeday.me/bug/20190828/1753957.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有