版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_30101879/article/details/79018369
第一步:连接UI查找官方文档;链接:https://weui.github.io/react-weui/docs/#/react-weui/docs/page/1/articles/12;
第二步:安装react-weui
npm i --save weui react-weui
第二步引入reactweui控件包
import {Page, Gallery, GalleryDelete, Uploader, Form, Cell, CellBody } from 'react-weui'
import 'weui';
import 'react-weui/build/packages/react-weui.css'(样式包的引入是必备的)
不然就无法达到预期的效果
第三步移入代码,设置参数;
3.1初始化初始状态值
this.state = {
gallery: false,
demoFiles : [
{
url:""//上传图片的本地路径
}
]
}
3.2引入gallery组件,是上传必须要有的一个组件
renderGallery(){
if(!this.state.gallery) return false;
let srcs = this.state.demoFiles.map(file=>file.url)
return (
<Gallery
src={srcs}
show
defaultIndex={this.state.gallery.id}
onClick={ e=> {
console.log('删除');//开启删除接口
//avoid click background item
e.preventDefault()
e.stopPropagation();
this.setState({gallery: false})
}}
>
<GalleryDelete onClick={ (e, id)=> {
this.setState({
demoFiles: this.state.demoFiles.filter((e,i)=>i != id),
gallery: this.state.demoFiles.length <= 1 ? true : false
})
}} />
</Gallery>
)
}
3.3关键点引入Uploader组件;
render(){
return(
<Page className="cell" title="上传图片" subTitle="上传图片">
{ this.renderGallery() }
<Form>
<Cell>
<CellBody>
<Uploader
title="图片上传"
maxCount={10}
files={this.state.demoFiles}
onError={msg => alert(msg)}
onChange={(file,e) => {
this.sendUpajax(file,e)
}}
onFileClick={
(e, file, i) => {
console.log('file click 删除图片', file, i)
this.setState({
gallery: {
url: file.url,
id: i
}
})
}
}
lang={{
maxError: maxCount => `最大上传${maxCount} 张图片`
}}
/>
</CellBody>
</Cell>
</Form>
</Page>
)
}
可以设置的参数:
maxCount
表示上传最多能上传多少张图片
demoFiles
设置上传图片的本地路径
maxWidth
设置最大宽度;
files文件中可以设置第三个值路径(src),错误提示(error),上传状态(status)
onChange上传图片函数
onError
上传图片错误函数提示msg->alert(msg)
title
表示上传图片标题
filter函数的过滤问题:它能当作map函数运用;进行遍历;
见下面代码:
let data = ['道','流道','的开放接口都是']
var newData = data.filter((e,i,s)=>{
console.log(e);//道 流道 的开放接口都是
console.log(i);//0,1,2
console.log(s);//返回原数组
return true;
//return false
})
console.log(newData);
返回原数组,return中可以加判断对所需的素组进行过滤;
input上传调取摄像头及图片上传;
<input type='file' id='files' accept="image/*" capture="camera"/>
/*
*capture属性和accept属性的值;
*
*1.camera表示只调取照相机;image/*表示接受所有图片;
*
*2.如果属性中使用multiple属性,则caputer属性失效;表示支持多选;
*2.2 accept 可以为vedio audio image值表示即可从本地也可调取手机设备;
*
*3.只要上传视频或者音频accept属性为vedio或audio即可,但是capture属性的值,得有变化
*3.3 capture可以为camcorder摄像机 microphone调取录音功能(ios手机无法直接调取录音功能,Andrio行)
*
*/
图片上传,可以采取两种方式,一种是formData数据进行上传,另种将图片转换成路径,进行上传。
第一种:FormData;
let formData = new FormData();
for(var i in data){
formData.append(i,data[i])
}
//此时data上送参数则为 formData,这种形式即可上传文件图片也可以上传其他类型数据。
第二种:路径方式:
function getImgObj(file){
var url = '';
if(window.createObjectURL != undefined){
url = window.createObjectURL(file);
}else if(window.URL != undefined){
url = window.URL.createObjectURL(file);
}else if(window.webkitURL != undefined){
url = window.webkitURL.createObjectURL(file);
}
return url;
}
//转成路径进行上传;