如果没有元素就让出现提示,confirmmodal,portal,过滤日志

如果没有元素就让出现提示

js数组不管有没有元素返回的都是true,所以我们只能判断他的长度

    if(logItemData.length===0){
        logItemData=<p className="no-logs">没有找到日志</p>
    }
    return <Card className="logs">
    {
        logItemData
    }

confirmmodal,自己定义确认框窗口,动态显示组件!!

const LogItem = (props) => {
  //添加一个state记录是否显示我们的确认窗口
   //默认值设置为false,表示为不显示窗口
  const[showConfirm,setShowConfirm]=useState(false);
  const deleteItemHandler=()=>{
    //当他为true的时候我们显示这个窗口
    setShowConfirm(true);

  }
  //取消函数
  const canceHandler=()=>{
    setShowConfirm(false)
  }
  //确定函数
  const okHandler=()=>{
    props.onDelLog();
  }
  return (
    <Card className="item">
    {/*只有showconfirm为true的时候才显示窗口*/}
    {showConfirm && <ConfirmModal 
    confirmText="该操作不可以恢复,确认吗?"
    onCancel={canceHandler}
    onOk={okHandler}
    />}

    <MyDate date={props.date}/>
    {/**日志内容容器 */}
    <div className="content">
        <h2 className='desc'> {props.desc}</h2>
        <div className='time'> {props.time}</div>
    </div>
    
    <div>
      <div onClick={deleteItemHandler} className={'delete'}>x</div>
    </div>
    </Card>
  )
}
import "./ConfirmModal.css";
import Card from '../Card/Card.js'
import BackDrop from '../BackDrop/BackDrop'
const ConfirmModal=(props)=>{
    return <BackDrop>
        <Card className="ConfirmModal">
       <div className="confirmText">
       <p>{props.confirmText}</p>
       </div>
       <div className="confirmButton">
        <button onClick={props.onOk}>确认</button>
        <button onClick={props.onCancel}>取消</button>
       </div>
    </Card>
    </BackDrop>
}

export default ConfirmModal

设置蒙版

在这里插入图片描述

在这里插入图片描述


层级元素,层级一样的话就会后面的盖住前面的。而且如果父元素盖不住别人子元素层级9999都盖不住别人

为什么会出现这个问题!!!?

我们的遮罩应该覆盖所有的网页,不应该与logitem有祖先和后代的关系

解决办法:portal

在React中,父组件引入子组件后,子组件会直接在父组件内部渲染。换句话说,React元素中的子组件,在DOM中,也会是其父组件对应DOM的后代元素。

但是,在有些场景下如果将子组件直接渲染为父组件的后代,在网页显示时会出现一些问题。比 如,需要在React中添加一个会盖住其他元素的Backdrop组件, Backdrop显示后, 页面中所有的元素都会被遮盖。很显然这里需要用到定位,但是如果将遮罩层直接在当前组件中渲染的话,遮罩层会成为当前组件的后代元素。如果此时,当前元素后边的兄弟元素中有开启定位的情况出现,且层级不低于当前元

使用方法

1.在index.html中添加一个新的元素

在这里插入图片描述

2.修改组件的渲染方式

在这里插入图片描述

通过ReactDOM.createPortal()作为返回值创建元素

参数
1.jsx代码(修改前return的代码)
2.目标位置(dom元素)


过滤日志

在这里插入图片描述
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值