// 利用React实现预览功能,并在预览上添加下载按钮:
import React, { useState } from 'react';
import { Button, Modal } from 'react-bootstrap';
const ImagePreview = () => {
const [show, setShow] = useState(false);
const [imgSrc, setImgSrc] = useState('');
const getImage = (e) => {
let reader = new FileReader();
const file = etargetfiles[0];
readeronloadend = () => {
setShow(true);
setImgSrc(readerresult)
}
readerreadAsDataURL(file);
}
const downloadImage = () => {
const link = documentcreateElement('a');
linkdownload = 'image';
linkhref = imgSrc;
linkclick();
}
return (
<>
<input type="file" onChange={getImage} />
<Modal show={show}>
<ModalBody>
<img src={imgSrc} alt="image preview"/>
</ModalBody>
<ModalFooter>
<Button onClick={downloadImage}>Download Image</Button>
</ModalFooter>
</Modal>
</>
)
}
export default ImagePreview;
介绍Hooks之前,首先要给大家说一下React的组件创建方式,一种是 类组件 ,一种是 纯函数组件 ,并且React团队希望,组件不要变成复杂的容器,最好只是数据流的管道。开发者根据需要,组合管道即可。也就是说 组件的最佳写法应该是函数,而不是类。 。 但是我们知道,在以往开发中 类组件 和 纯函数组件的区别是很大的,纯函数组件有着类组件不具备的多种特点,简单列举几条
这就注定,我们所推崇的函数组件,只能做UI展示的功能,涉及到状态的管理与切换,我们不得不用类组件或者redux,但我们知道类组件的也是有缺点的,比如,遇到简单的页面,你的代码会显得很重,并且每创建一个类组件,都要去继承一个React实例,至于Redux,更不用多说,很久之前Redux的作者就说过,“能用React解决的问题就不用Redux”,等等一系列的话。关于React类组件redux的作者又有话说
下面我们用类组件做一个简单的计数器
可以看出来,上面的代码确实很重。 为了解决这种, 类组件功能齐全却很重,纯函数很轻便却有上文几点重大限制 ,React团队设计了 React Hooks React Hooks就是加强版的函数组件,我们可以完全不使用 class ,就能写出一个全功能的组件
'Hooks'的单词意思为“钩子”。 React Hooks 的意思是,组件尽量写成纯函数,如果需要外部功能和副作用,就用钩子把外部代码"钩"进来。 而React Hooks 就是我们所说的“钩子”。 那么Hooks要怎么用呢?“你需要写什么功能,就用什么钩子”。对于常见的功能,React为我们提供了一些常用的钩子,当然有特殊需要,我们也可以写自己的钩子。下面是React为我们提供的默认的四种最常用钩子
不同的钩子为函数引入不同的外部功能,我们发现上面四种钩子都带有 use 前缀,React约定,钩子 一律使用 use 前缀命名。所以,你自己定义的钩子都要命名为useXXX。
下面介绍四种默认钩子的用法
我们知道,纯函数组件没有状态, useState() 用于为函数组件引入状态。 下面我们使用Hooks重写上面的计数器。
通过上面的代码,我们实现了一个功能完全一样的计数器,代码看起来更加的轻便简洁,没有了继承,没有了渲染逻辑,没有了生命周期等。这就是hooks存在的意义。 在 useState() 中,它接受状态的初始值作为参数,即上例中计数的初始值,它返回一个数组,其中数组第一项为一个变量,指向状态的当前值。类似 thisstate ,第二项是一个函数,用来更新状态,类似 setState 。该函数的命名,我们约定为 set 前缀加状态的变量名。
该钩子的作用是,在组件之间共享状态。关于Context这里不再赘述,其作用就是可以做状态的分发,在React16X以后支持,避免了react逐层通过Props传递数据。 下面是一个例子,现在假设有A组件和B组件需要共享一个状态。
我们看下页面
useState里数据务必为immutable (不可赋值的对象),也就是ass component的state也提倡使用immutable数据,但不是强制的,因为只要调用了setState就会触发更新。
所以再class组件中没有出现这种问题,或者通过改变为空再赋值是可以触发更新的。
但是再使用useState时,如果在更新函数里传入同一个对象时将无法触发更新。
在这里插入描述
官网在这里插入描述
二、解决方案
<Column align="center" title="部门" dataIndex={["dept", "deptName"]} />
1
1
技术交流分享/面试总结
微信名片
打开CSDN APP,看更多技术内容
最新发布 保姆级教程:Ant Design Vue中 a-table 嵌套子表格
Ant Design Vue中 a-table 嵌套子表格 及只打开一个嵌套表格的方法
继续访问
Antd(Ant-design),嵌套子表格(expandedRowRender)的异步获取数据
使用阿里的ant-design开源框架,要在表格里面嵌套子表格,需要在用户点击父表格的一行数据后,获取该行的key,然后去异步请求后台的数据用来填充子表格的内容。 如果这样写(省略无关代码): expandedRowRender = (record) => { dispatch({ type: 'flow/getPlanList', payload: { contractId: recordcontract_id, // 该参数
继续访问
react-ant design table表格 多级可编辑表格
antd-react 3X版本 多级可编辑table
继续访问
reactjs ant-design中table 树结构三级嵌套时逻辑问题
实现三级嵌套树结构时,勾选三级里的子节点时候父节点也会自动勾选,当子节点大于一项时候取消勾选某一子结构时父节点不变;当子节点只有一项时父节点也会自动取消勾选 import StandardTablePage from '@/components/StandardTablePage'; // 用户选中某一行 userSelect(record, selected, selectedRows, nativeEvent) { let { selectedRowKeys } = thisst
继续访问
React antd的table表格之嵌套表格
React antd的table表格之嵌套表格 最近做了几个pc端的后台管理需求,涉及了table中的嵌套表格,嵌套的子表格大体分为两种效果: 效果1-----点击展开新的子表格,旧的子表格关闭 效果2-----可同时展开多个子表格 效果1:嵌套表格,实现点击展开按钮,展开子表格请求接口数据,点击新的子表格收起原来的子表格效果 // 设置一个State用来储存展开的行,控制属性 const [expandedRowKeys,setExpandedRowKeys] = useState<any>
继续访问
vue 嵌套表格组件_支持嵌套对象、多级数组的Vue动态多级表单组件 —— vue-dynamic-form-component
方便不想看完全篇文章的童鞋,简单总结一下,这是篇软广,主要是推广自己在业务中沉淀的一个开源组件 vue-dynamic-form-component 。基于 element-ui 实现的 vue组件,只需编写类似 async-validator 的规则,自动生成对应的表单,支持常见输入类型的同时,支持嵌套对象、hashmap、多维数组等复杂类型。有需要的童鞋欢迎使用和贡献代码,顺便给个star(我
继续访问
antd table嵌套子表格 后端动态获取数据 rudex写法示例
有一个需求是可以使主表格里每一栏数据展开,在子table里显示与其相关的子数据项,展开的时候去向后台请求数据显示。 用的组件库是Antd。 首先我们看Antd官方文档的Table有嵌套子表格的功能, 可见我们需要使用expandedRowRender参数,但是尝试在expandedRowRender函数中进行请求,会发现发出了连续的请求,所以我们把请求写在onExpand中,只在点击展开图表的时候发出一次。 之后我们写onExpand函数,注意这里的参数要写上expanded,代表是展开还是合并,我之前
继续访问
React-Antd-表格-嵌套子表格
文档地址: 链接 import { Table, Badge, Menu, Dropdown, Space } from "antd"; import { DownOutlined } from "@ant-design/icons"; import { useEffect, useState } from "react"; export default function App() { const columns = [//定义外层表格头数据 { title: "姓名", dataInde
继续访问
React antd Table 实现单元格点击 表头斜线分组等功能
react antd 单元格添加点击事件 自定义单元格
继续访问
进阶Ant-Design-Vue你知道table多级表头嵌套展开写法吗?
前言: 在Ant-Design-Vue的前端项目中,我们会经常处理表格,表单这些组件元素,熟练运用并知道它们在使用过程中的联系与区别,这是一个前端必不可少的哟。本文我旨在解决两个问题: (1)如何便于更好的嵌套多级表头 (2)如何通过a-checkbox控制全选,单选显示a-table对应的列元素 类似于ElementUI,Ant-Design-vue中有很多相似点,但又不完全苟同,有很多自己独有的写法和思想。相信很多人都是先入手ElementUI,再入手Ant,这其实是对开发者比较友好的方式,如果
继续访问
前端面试题(react)
性能优化分为2个方面setState 是修改其中的部分状态,相当于 Object assign,只是覆盖,不会减少原来的状态; replaceState 是完全替换原来的状态,相当于赋值,将原来的 state 替换为另一个对象,如果新状态属性减少,那么 state 中就没有这个状态了接收旧的 state 和 action,返回新的 state受控组件就是可以被 react 状态控制的组件 在 react 中,Input textarea 等组件默认是非受控组件(输入框内部的值是用户控制,和React无关)
继续访问
Antd 表格设置表头分组实现可编辑行
主要通过 onCell 方法修改 children 中 cloumn 的属性。
继续访问
antd 能自适应吗_admin-antd-react 是一个后台前端解决方案,它基于 React、Ant Design和 UmiJs实现。
admin-antd-react 是一个后台前端解决方案,它基于 React、Ant Design和 UmiJs实现。2020-11-11 13:47:08 • 阅读 144 次# 介绍[admin-antd-react](>
useEffect的执行机制,是比较两次依赖项是否相同,不同则执行相关effect。
思路1: 查看父组建有没有多次UseState,每useSTate一次,子组件就会render一次,导致多次执行useEffect调接口
思路2: useEffect 的依赖项有多个的时候,尽量简洁 。某些执行效果一样的依赖项目就保留一个。
如果想先调父组件数据,再调子组件数据,可以把父组件的请求结果数据,作为子组件的依赖项。
useLayoutEffect的执行顺序是同步,useEffect是异步的。useLayoutEffect会优先于useEffect执行。
Hook 是以 use 开头的特殊函数,让 函数组件 拥有 calss组件 的某些特性。Effect Hook 就是指 useEffect 这个特殊函数,它让 函数组件 能在渲染完成后执行自定义 *** 作。
useEffect 中要谨慎使用 useState ,因为它会触发组件渲染后,再次调用 useEffect,形成一个死循环。正确方式:用条件语句包裹 useState 方法,定义了退出条件,避开死循环。
让组件只监控特定数据的变更,再进行渲染后的 *** 作,忽略不必要的 *** 作,很好的优化了组件性能。
只有一个参数,每一次组件渲染完成后 且 在下一次渲染前 被调用。
有两个参数,第二个参数是空数组( [] ) 。在组件首次加载渲染完成后被调用,且只被调用这一次。
有两个参数,第二个参数是数组。只有当数组里面的值改变时, useEffect 才会被调用。
useEffect 被调用时,执行了一些 *** 作(譬如设定了一个定时器、访问了一些网络资源),在组件卸载时,必须做一些清除 *** 作来防止内存泄露等问题。
解决方案:只需要在 useEffect 中返回一个清除函数,React会在组件卸载之前调用清除函数。
useEffect 没有指定依赖,意味着 useEffect 只会运行一次,其内部获取到的 count 永远是初始值0,导致页面 中的 <h1>{count}</h1> 值,永远是1。
在 useEffect 中添加 count 依赖,这样每一次 useEffect 执行 setCount 带来count的变化,都会使得 useEffect 再次被调用,可以解决问题,但是这样会带来另一个问题,每一次执行 useEffect 都会清除计时器,再重新设置计时器,这不是我们想要的。
采用 setState 的更新特性,让 setCount 自己去获取和更新 count,让 useEffect 完全脱离对 count 的依赖,实现最终理想效果。
使用 useRef 和 useEffect 来实现,仅当你实在找不到更好办法的时候才这么做,因为依赖于变更会使得组件更难以预测。
useEffect 会在组件完全渲染完后被调用执行,此时执行的 useEffect ,如果涉及到可见DOM变更,就可能给客户带来视觉上的跳跃感,此时可以考虑使用 useLayoutEffect ,使用方式跟 useEffect 完全一样,只是被调用的时机不同。
以上就是关于react图片预览增加下载按钮全部的内容,包括:react图片预览增加下载按钮、React Hooks useEffect useState userContext userReducer应用项目、react usestate 重新设置数据后,不渲染页面等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)