javascript – JSX for … in循环

前端之家收集整理的这篇文章主要介绍了javascript – JSX for … in循环前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
鉴于此对象:
lst socials = {
  foo: 'http://foo'
}

我想在JSX中循环它.这有效:

let socialLinks = []
let socialBar
for (let social in socials) {
  socialLinks.push(<li>
                     <a alt={social} href={socials[social]}>{ social }</a>
                   </li>)
}
if (socialLinks) {
  socialBar = <div className='align-bottom text-center'>
                <ul className='list-inline social-list mb24'>
                  {socialLinks}
                </ul>
              </div>
}

但这不是(社会未定义):

let socialBar
if (socials) {
  socialBar = <div className='align-bottom text-center'>
                <ul className='list-inline social-list mb24'>
                  for(let social in socials)
                  {<li>
                     <a alt={social} href={socials[social]}>{ social }</a> // social is undefined
                   </li>}
                </ul>
              </div>
}

在第二个例子中社交未定义的原因是什么?我假设内部括号有一个范围问题,但我没有成功修复它.

我可以用对象键做一个forEach,就像在这个post中一样,但这与我的工作示例没什么不同.

要清楚 – 我有它工作,我只是希望在我的第二个例子中更清楚地确定范围问题(或语法错误,如果是这样).

解决方法

JSX只是糖被转化为React.createElement的一堆函数调用,您可以在这里找到文档: https://facebook.github.io/react/docs/top-level-api.html#react.createelement
ReactElement createElement(
  string/ReactClass type,[object props],[children ...]
)

基本上你的JSX来自

<div style="color: white;">
  <div></div>
</div>

React.createElement('div',{ style: { color: 'white' } },[
  React.createElement('div',{},[])
])

出于同样的原因,您无法将循环传递给函数中的参数,因此无法将循环放入JSX中.它最终看起来像

React.createElement('div',for (;;) <div></div>)
])

这根本没有意义,因为你不能将for循环作为参数传递.另一方面,map调用返回一个数组,该数组是React.createElement的第三个参数的正确类型.

React在一天结束时仍然是一个虚拟dom库,但JSX只是让它更熟悉. hyperscript是vdom库的另一个很好的例子,但JSX不是标准的.他们的自述文件中的示例类似于没有JSX时React的样子:

var h = require('hyperscript')
h('div#page',h('div#header',h('h1.classy','h',{ style: {'background-color': '#22f'} })),h('div#menu',{ style: {'background-color': '#2f2'} },h('ul',h('li','one'),'two'),'three'))),h('h2','content title',{ style: {'background-color': '#f22'} }),h('p',"so it's just like a templating engine,\n","but easy to use inline with javascript\n"),"the intension is for this to be used to create\n","reusable,interactive html widgets. "))
原文链接:https://www.f2er.com/js/157084.html

猜你在找的JavaScript相关文章