React创建DOM节点,通过innerHtml重绘,去操作react的方法

最近做一个操作,点击新建公司,增加公司名称(可取消,保存),通过原生JS去增加节点,此时取消/保存按钮的this指向自身,不能去调用react方法,可以采用挂在在window上
在这里插入图片描述

import ReactDOM from 'react-dom';
import React, { Component } from 'react';
import { Button} from 'zent';

export default class station extends React.Component{
  constructor(props){
    super(props)
    <font color='red'>**window["mystation"] = this;**</font>   挂载到window上
    this.state={
      disbtn:true,
    }
     <font color='red'> this.addItem=this.addItem.bind(this);     解决this指向</font> 
  }
 
   <font color='blue'>input输入后需要点击的保存按钮:</font> 
  saveFn(){
    console.log('保存成功');
  }
  
   <font color='blue'>点击新建按钮:</font> 
  addItem(e){
    //获取节点,追加填入的input
    if(this.state.disbtn){
      let btnName=1;
      let nextDom=e.target.nextSibling;
      let addipt=document.createElement('div');
      addipt.className="newitem";
      addipt.innerHTML=`
      <input placeholder="请输入新增公司名" />
      <p><span class="del" onClick={ window["mystation"].saveFn}>取消</span><span class="operation" onClick={this.saveFn}>编辑</span></p>
      `;
      nextDom.appendChild(addipt);
      this.setState({'disbtn':false});
      if(btnName==0){
        this.setState({'disbtn':true});
      }
      let netList=document.querySelectorAll('.newitem');
      netList.forEach((item,i)=>{
        item.className="newitem";
        netList.forEach((item2,i2)=>{
          netList[netList.length-1].className="newitem focusactive";
          netList[netList.length-1].children[0].focus();
        });
      });
    }else{
      Notify.clear()
      Notify.warn('请先输入新增的公司名');
      
    }
  }
 
render(){
    return(
      <div id="station"  className="maincenter">
         <Card style={{ width:'100%' }} title="岗位列表">
        <p className="cardtable">
        <Card type="nested" title="公司" className="carditem">
        <div>
          <p className="newadd" onClick={this.addItem}>+新建公司</p>
          <div className="addList">
            <div className="newitem"><span>这是新增的公司</span>
            <p><span className="del">删除</span><span className="operation
">保存</span></p>
            </div>
          </div>
        </div>
    </Card>
        </p>
  </Card>
      </div>
    )
  }
}

在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值