React 实现骨架屏组件

思路其实就是:当数据未返回的时候,渲染骨架屏组件,数据返回之后,渲染真正的组件

| - skeletons
	  | - OrderSkeletons
	  	  | - index.js
	  	  | - index.less
	  | - index.js

index.js

export { default as OrderSkeletons } from './OrderSkeletons';

index.js

import React, { useState, useEffect } from 'react';

import './index.less';

export default function (props) {
  const [state, setState] = useState(Array(3).fill(1));

  useEffect(() => {

  }, [])

  return (
    <div className='order-skeletons'>
      {state.map(item => (
        <div className='order-item' key={item}>
          <div className={'skeletons left'}></div>
          <div className='center'>
            <div className={'skeletons title'}></div>
            <div className={'skeletons price'}></div>
            <div className={'skeletons time'}></div>
          </div>
          <div className={'skeletons pay'}>
          </div>
        </div>
      ))}
    </div>
  )
}

index.less

@import '../../assets/mixin.less';

.order-skeletons {
  .order-item {
    .flex(row, flex-start);
    margin-bottom: 12px;
    padding: 12px;
    width: 100%;
    box-sizing: border-box;
    .left {
      width: 120px;
      height: 80px;
    }
    .center {
      flex: 1;
      margin: 0 12px;
      .price {
        margin: 12px 0;
        width: 50px;
      }
      .time {
        width: 120px;
      }
    }
    .pay {
      margin-right: 4px;
      width: 70px;
      height: 30px;
    }
  }
}


/* Skeletons效果 */
.skeletons {
  position: relative;
  display: block;
  overflow: hidden;
  width: 100%;
  min-height: 20px;
  background-color: #ededed;
}
.skeletons:empty::after {
  display: block;
  content: '';
  position: absolute;
  width: 100%;
  height: 100%;
  transform: translateX(-100%);
  background: linear-gradient(90deg, transparent, rgba(216, 216, 216, 0.253), transparent);
  animation: loading 1.5s infinite;
}

@keyframes loading { /* 骨架屏动画 */
  from {
    left: -100%;
  }
  to {
    left: 120%;
  }
}

mixin.less

.flex(@direction:row, @justify:center, @align:center){
  display: flex;
  flex-direction: @direction;
  justify-content: @justify;
  align-items: @align;
}

组件用法


import { OrderSkeletons } from '@/skeletons'

export default function(props){
  const [state, setState] = useState()

  useEffect(() => {

  }, [])
  console.log(props)

  return (
    <div>
      {isEmpty(props?.orders) ?
        <OrderSkeletons toast /> :
        <div className='tab-lists'>
          //....
        </div>
      }
    </div>
  )
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 好的,我来为你解答如何使用 React 实现用户登录组件。 首先,你需要准备一个表单,用于输入用户的登录信息。表单可以使用 React 中的 form 元素来实现。 下面是一个简单的登录表单的示例代码: ``` import React, { useState } from 'react'; function LoginForm() { const [username, setUsername] = useState(''); const [password, setPassword] = useState(''); const handleSubmit = (event) => { event.preventDefault(); // 这里可以添加登录逻辑 }; return ( <form onSubmit={handleSubmit}> <label> 用户名: <input type="text" value={username} onChange={(event) => setUsername(event.target.value)} /> </label> <br /> <label> 密码: <input type="password" value={password} onChange={(event) => setPassword(event.target.value)} /> </label> <br /> <button type="submit">登录</button> </form> ); } export default LoginForm; ``` 在上面的代码中,我们使用了 React 的 useState hook 来管理表单中的用户名和密码的状态。当用户在输入框中输入信息时,通过调用 setUsername 和 setPassword 函数来更新状态。 在表单提交时,我们使用了 handleSubmit 函数来阻止默认的提交行为,并在函数内部添加登录逻辑。 这就是 React实现用户登录组件的简单方法。希望这对你有所帮助。 ### 回答2: React是一个用于构建用户界面的JavaScript库,可以用它来实现用户登录组件。 要实现一个用户登录组件,首先需要创建一个React组件。可以创建一个名为“Login”的组件,该组件将包含用户登录所需的输入字段和登录按钮。 在组件的构造函数中,可以定义state来存储用户输入的用户名和密码。可以使用React的setState函数来更新state。 组件的render函数将返回一个包含用户名输入框、密码输入框和登录按钮的表单。可以使用React的onChange事件监听器来监听输入框的变化,并使用setState函数更新state。 当用户点击登录按钮时,可以在onClick事件处理程序中调用一个函数来处理登录逻辑。该函数可以验证用户名和密码是否正确,并执行相应的操作,例如显示登录成功或失败的消息。 在组件的render函数中,可以使用state来根据登录成功与否来显示不同的内容。例如,可以根据state中的一个布尔值来显示“登录成功”或“登录失败”的消息。 除了上述基本功能外,还可以根据需求添加其他的功能,例如记住登录状态、实现更复杂的验证逻辑等。 最后,将登录组件添加到应用的其他组件中,以实现完整的用户登录功能。 通过使用React,可以轻松地构建用户登录组件,并实现用户登录功能。 ### 回答3: 要实现用户登录组件,可以使用React来完成。 首先,需要创建一个Login组件,包含用户名输入框、密码输入框和登录按钮。在构造函数中,设置相关的state数据,如username和password,用于保存用户输入的值。 接下来,在render方法中,使用input元素来创建用户名和密码输入框,并通过onChange事件监听用户输入,将输入的值更新到state数据中。 在登录按钮的onClick事件处理函数中,可以在点击按钮时,获取state中保存的用户名和密码,并向后台发送登录请求。 在进行登录请求的处理过程中,可以使用axios等库来发起真正的网络请求。可以定义一个handleLogin方法来处理登录请求,在该方法中,使用axios发送POST请求,并将用户名和密码作为请求体参数发送到后台。成功登录后,可以根据后台返回的数据进行相应的处理,如跳转到登录成功页面或显示登录失败的提示信息。 最后,将Login组件渲染到页面中,即可实现用户登录功能。 需要注意的是,实现用户登录组件还需要进行表单验证、用户输入的数据处理和错误提示等方面的处理,以保证登录功能的完整性和安全性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值