react根据json格式数据动态增加dom

通常在js中增加元素是怎么做的呢?
用document.getElementById(". . .") 获得DOM元素后,然后用appendChild()实现函数添加

那么在react中添加元素是否也要采取这样的方式呢?当然不是那样的。

废话不多说.

这里调用组件LeftPanel

<LeftPanel content={[{"title":"工程研发部门","item":"Mac 开发工程师","checked":"false","number":9},
                     {"title":"工程研发部门","item":"iOS App 测试工程师","checked":"false","number":17},
                     {"title":"工程研发部门","item":"Android 远程控制工程师","checked":"false","number":61},
                     {"title":"工程研发部门","item":"Web 前端工程师","checked":"false","number":31},
                     {"title":"工程研发部门","item":"Android 多媒体软件开发工程师","checked":"false","number":2},
                     {"title":"产品设计部门","item":"网页设计师","checked":"false","number":47},
                     {"title":"产品设计部门","item":"ID/工业设计师","checked":"false","number":39},
                     {"title":"产品设计部门","item":"视觉设计师/GUI界面设计师","checked":"false","number":42},
                     {"title":"产品设计部门","item":"平面设计师","checked":"false","number":8}
                    ]}/>

以上是我定义的一个组件LeftPanel, 属性content是一个数组.

          {/*存放标题*/}
          var titles = [];
          {/*类别归类对象*/}
          var itemsSort = {};

          this.props.content.forEach(function(items){
            {/*判断对象是否存在*/}
            if(!itemsSort[items.title]){
              titles.push(items.title);
              itemsSort[items.title] = [];
              itemsSort[items.title].push(items);

            }else{
              itemsSort[items.title].push(items);
            }

          });

          var chooseNode = titles.map(function(title){
            return (
              <SelectionTitle content={title} item={itemsSort[title]} checked={this.state.checked}/>
            )
          }.bind(this));

以上的代码在定义了chooseNode的一个组件,这就是核心的内容了,首先是map()函数的特性,那就是它可以有返回值,使得自定义的组件或者DOM标签添加到(注意这里不是替代,而是添加)变量chooseNode。其次注意的map是用于遍历数组,这里还有一个重要的一点是,每一个返回的组件要有key值,之所以这样是因为这样的性能更优,当然即使没有key值也是可以完成的,但是建议用key值。这个时候choose就可以被赋值为DOM元素了

OK,完成之后你可以在render(){}中的return中这样写{chooseNode},实例代码如下

return (
        <div id="leftPanel" ref="leftPanel" style={styles.wrapBackground}>
          <div>
            <div style={styles.wrap}>
              <span style={styles.title}>招聘职位</span>
              <button style={styles.button} onClick={this.handleClick}>清空</button>
            </div>
            {chooseNode}
          </div>
        </div>
      );

下面是全部的代码的地址:
https://github.com/Luciahelloworld/LeftChooseMission

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值