react

✍️ Tangxt ⏳ 2021-04-12 🏷️ epic

04-完结篇上传历史的实现

1)产品完善:上传限制与加载提示

目前的问题:可以上传视频等资源

如果什么都可以上传,而且上传内容的大小也不限制,那么这个免费的存储空间很容易就满了……

我们要做的:

  1. 限制文件的类型
  2. 限制文件的大小

用到的第三方组件:加载中 Spin - Ant Design

上传限制:

上传限制

效果:

效果

效果


加载提示:

加载提示

效果:

效果

2)上传历史数据查询接口

数据都在 Leancloud 的 Image 里边:

数据位置

我们要做的:

  1. 查询数据
  2. 展示数据

CRUD 之 查询操作!


执行一次基础查询通常包括这些步骤:

  1. 构建 AV.Query
  2. 向其添加查询条件;
  3. 执行查询并获取包含满足条件的对象的数组。

代码:

代码

注意: skip 的值越高,查询所需的时间就越长。作为替代方案,可以通过设置 createdAtupdatedAt 的范围来实现更高效的翻页,因为它们都自带索引。

💡:关于include

include

➹:数据存储入门教程 · JavaScript - LeanCloud 文档

➹:查询 · JavaScript - LeanCloud 文档

3)上传历史全局状态管理

import {
  observable,
  action,
  makeObservable
} from "mobx";
import {
  Uploader
} from "../models";
import {
  message
} from "antd";

class HistoryStore {
  constructor() {
    makeObservable(this);
  }
  @observable list = [];
  @observable isLoading = false;
  @observable hasMore = true;
  @observable page = 0;
  limit = 10;

  @action append(newList) {
    this.list = this.list.concat(newList);
  }

  @action find() {
    this.isLoading = true;
    Uploader.find({
        page: this.page,
        limit: this.limit
      })
      .then((newList) => {
        this.append(newList);
        if (newList.length < this.limit) {
          this.hasMore = false;
        }
      })
      .catch((error) => {
        message.error("加载数据失败", error);
      })
      .finally(() => {
        this.isLoading = false;
      });
  }
}

export default new HistoryStore();

4)加载更多的实现 & 列表数据展现

文档:列表 List - Ant Design

列表数据展现

➹:源码阅读-通过 react-infinite-scroller 理解滚动加载要点 - SegmentFault 思否

5)产品完结

完善一些细节,如样式之类的……

6)代码部署:设置 GithubPages 预览

➹:将 react 项目部署到 Github pages_stay hungry stay foolish-CSDN 博客

➹:Deployment - Create React App

7)其它

💡:在使用styled-compnents的过程中,如何为元素添加伪类?

➹:styled-components 使用方法 - SegmentFault 思否

💡:使用 craco 来搞装饰器?

antd 最开始也是推荐的react-app-rewired,但是后来react-app-rewired不怎么维护了,所以改为了craco

➹:craco 和 react-app-rewired 有什么区别?- SegmentFault 思否

➹:react Ant Design 中 craco 配置 及 装饰器的配置_北芒的博客-CSDN 博客

➹:更骚的 create-react-app 开发环境配置 craco · 语雀

💡:更改 logo?

更改 logo

➹:iconfont-阿里巴巴矢量图标库

➹:色彩 - Ant Design

💡:好看的盒子阴影?

➹:86 Beautiful CSS box-shadow examples - CSS Scan

💡:favicon 制作?

favicon

选择 64*64

➹:favicon 制作 - 在线工具

💡:用yarn作为包管理工具的项目,能否用npx安装东西?

我能否这样:npx tailwindcss init

➹:yarn equivalent of npx ? · Issue #3937 · yarnpkg/yarn

💡:实现响应式导航条?

用了 tailwind!

注意:Breakpoints

➹:How to create a responsive navigation menu in Tailwind CSS?

➹:【CSS】当红框架!你必须认识 Tailwind CSS_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili

➹:如何评价 CSS 框架 TailwindCSS? - 知乎

➹:在 React 编程中,我是如何用 tailwind 优化样式编写的?- 起源地

💡:输入自定义尺寸时,过滤空格?

对输入的值trim一下就好了!

💡:点击预览图片可放大?

安装react-zmage -> 把img改为Zmage即可!

➹:Caldis/react-zmage: 一个基于 React 的可缩放图片控件 - A scalable image wrapper power by react

💡:移动端上传图片选择?

简单添加两个属性就行了:

属性

➹:用 input type=file 调取手机照相机以及相册选择照片上传_伯涵 Style 的博客-CSDN 博客

➹:【方法】移动端 H5 如何调用相册和相机上传图片、音频、视频 - WANNANANANA - 博客园

➹:前端AntD框架的upload组件上传图片时遇到的一些坑 - 千古壹号 - 博客园

➹:Fusion 组件设计 - Upload 上传的高扩展能力 - 知乎

💡:在上传历史里边,可以删除图片?

文档:删除对象