资讯专栏INFORMATION COLUMN

react-鼠标滑过显示编辑按钮点击显示输入框编辑内容

ymyang / 3153人阅读

摘要:页面显示效果点击编辑显示效果由于项目频繁修改相关信息,并多带带提交,为了方便,封装了一个简单的组件组件依赖用到了图标和组件这不用可以省略组件宽高显示为自适应控制父级大小即可,类型可无限扩展输入框修改组件接收参数展示内容展示字体大小图标颜色输入

页面显示效果

点击编辑显示效果

由于项目频繁修改相关信息,并多带带提交,为了方便,封装了一个简单的组件组件依赖antd(用到了图标和Input组件这不用可以省略)组件宽高显示为自适应控制父级大小即可,类型可无限扩展

/**

输入框修改组件接收参数:

value: 展示内容

fontSize: 展示字体大小

iconColor: 图标颜色

inputWidth: 输入框宽度 默认100px

showSize: 最多显示的字数

type: (string) number、url、可不传不做限制

required: true为必填

amount: 字数最大限制

name: 为字段名

id: 需要的id

idName: id的字段名

handleDelete(): 删除回调

handleOk(): 点击对号回调

**/

调用代码

fontSize="14px"            //显示字体大小
iconColor="#5f68ea"        //鼠标滑过icon图标颜色
inputWidth="400px"         //输入框宽度,高度自适应
showSize="30"              //可展示字数,溢出隐藏,滑过展示全部
amount="30"                //字数限制长度
type="number"              //可输入类型
handleOk={this.handleOk}   //点击对号回调
value="17600381667"        //传入内容
name="firmFax"             //地段名

/>

组件代码

import React from "react";
import {Icon, Input, message, Tooltip} from "antd";

export default class ChangeInput extends React.Component {

constructor(props) {
    super(props);
    this.state = {
        showInput:false,     //输入框显示隐藏
        valueCon:"",         //input框回显字段
    }
}
//点击展示输入框
handleChangeClick = () => {
  this.setState({
      showInput:true
  })
};
//点击关闭输入框
handleCloseClick = () => {
    this.setState({
        showInput:!this.state.showInput
    })
};
//去空格
trim = (str) => {
    return str.replace(/^(s|u00A0)+/,"").replace(/(s|u00A0)+$/,"");
};
//点击确定按钮
handleAffirmClick = () => {

    //判断不为空
    if(this.props.required&&this.trim(this.state.valueCon)===""||this.props.required&&this.trim(this.state.valueCon)==="-") {
        message.error(`此字段不能为空及特殊字符"-"`);
        return false
    }

    //判断为数字
    if(this.props.type&&this.props.type==="number"&&isNaN(this.trim(this.state.valueCon))) {
        message.error(`请输入数字`);
        return false
    }

    //判断网址
    let reg=/^{2}[w-]+(([w-][w-s]*[w-]+[$$]?$)|([w-][$$]?$))/;
    if(this.props.type&&this.props.type==="url"&&!reg.test(this.props.valueCon)){
        message.error("这网址不是以http://https://开头,或者不是网址!");
        return false
    }

    //判断字数长度
    if(this.trim(this.state.valueCon).length>this.props.amount){
        message.error(`字数不得超过${this.props.amount}个字`);
        return false
    }



    //回调确定方法
    let obj = {};
    // obj.value = this.state.valueCon;
    // obj.label = this.props.name;
    obj[ this.props.name] = this.state.valueCon;
    //判断是否需要id
    if(this.props.idName){
        obj[this.props.idName] = this.props.id;
    }
    this.props.handleOk(obj);

    //关闭输入框
    this.setState({
        showInput:this.props.isShow
    })
};
//input改变
handleChange = (e) => {
    console.log(e.target.value);
    this.setState({
        valueCon:e.target.value
    })
};
componentDidMount() {
    this.setState({
        valueCon:this.props.value,
    })
}
handleDeleteClick = () =>{
    let obj = {};
    // obj.value = this.state.valueCon;
    // obj.label = this.props.name;
    obj[ this.props.name] = this.state.valueCon;
    //判断是否需要id
    if(this.props.idName){
        obj[this.props.idName] = this.props.id;
    }
    this.props.handleDelete(obj);
};

render() {
    const {value,fontSize,iconColor,inputWidth,showSize} = this.props;

    console.log(value)

    return (
        
{!this.state.showInput?
{showSize&&value.length>showSize? {value.slice(0,showSize)+"..."} :value } {this.props.handleDelete&& }
:
}
) }

}

css代码

.change_input{
width: 100%;
//background: slateblue;
height: 100%;
overflow: hidden;
word-break: break-all;
.change_input_name{

//float: left;
.change_input_hide_change{
  margin-left: 5px;
  cursor: pointer;
  display: none;
}

}
&:hover{

.change_input_name{
  .change_input_hide_change{
    display: inline-block;
  }
}

}
}
.write_input{
height: 100%;
overflow: hidden;
.write_input_name{

//height: 98%;
float: left;

}
.write_input_hide{

height: 100%;
float: left;
//background: seagreen;
.write_input_hide_yes{
  margin-left: 5px;
}
.write_input_hide_no{
  margin-left: 5px;
}
//width: 100px;

}
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/114597.html

相关文章

  • react-鼠标滑过显示编辑按钮点击显示输入编辑内容

    摘要:页面显示效果点击编辑显示效果由于项目频繁修改相关信息,并单独提交,为了方便,封装了一个简单的组件组件依赖用到了图标和组件这不用可以省略组件宽高显示为自适应控制父级大小即可,类型可无限扩展输入框修改组件接收参数展示内容展示字体大小图标颜色输入 页面显示效果showImg(https://segmentfault.com/img/bVbspoH?w=300&h=222); 点击编辑显示效果...

    MartinHan 评论0 收藏0
  • Python 小白从零开始 PyQt5 项目实战(4)基本控件

    摘要:本系列面向小白,从零开始实战解说应用进行的项目实战。本文介绍通过工具栏创建常用的基本控件,包括各种按钮控件文本输入控件和调节输入控件。是主窗口大小拉伸后,控件对象的最小尺寸最大尺寸。 ...

    Awbeci 评论0 收藏0
  • Python Qt GUI设计:UI界面可视化组件、属性概述(基础篇—3)

    摘要:属性配置界面的定义了组件的初始大小,其他属性都与组件大小调整时控制组件的大小相关。属性由四个值组成,分别是水平策略垂直策略水平伸展和垂直伸展。属性缺省值为空字符串。此属性默认为空。是对属性的补充说明。 目录 1、界面组件 1.1、布局组件(Layouts) 1.2、分隔组件(Spacers)...

    SexySix 评论0 收藏0
  • Python 小白从零开始 PyQt5 项目实战(3)信号与槽的连接

    摘要:本系列面向小白,从零开始实战解说应用进行的项目实战。发射信号信号被发射时,自动调用信号连接的槽函数。信号与槽的连接相同的发送者与接收者,槽函数为控件的内置函数本例介绍相同的发送者与接收者,槽函数为控件的内置函数的操作方法。 ...

    afishhhhh 评论0 收藏0
  • DIV+CSS学习笔记总结篇

    摘要:每个列表项始于标签。由动作属性定义的这个文件通常会对接收到的输入数据进行相关的处理。标签的属性应当与相关元素的属性相同。姓名性别姓名性别单元格标签可以定义表格中的一个单元格,表示一个单元格。 第一部分 HTML 第一章 职业规划和前景 职业方向规划定位: web前端开发工程师 web网站架构师 自己创业 转岗管理或其他 web前端开发的前景展望: 未来IT行业企业需求...

    iOS122 评论0 收藏0

发表评论

0条评论

ymyang

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<