Я делаю запрос на выборку в componentDidMount и использую его для изменения состояния URL.проблема заключается в том, что он не перепроверяет условие, заданное внутри рендера, после изменения состояния.почему это происходит?в основном, после изменения состояния я хочу динамически создавать холсты на основе данных в URL-адресах, а затем использовать холст для преобразования pdf в изображение.
вот компонент реакции
export default class ShowSplitPdf extends Component{
constructor(props){
super(props);
this.state={
loading:true,
imgsrc : []
}
}
pdfConversion = ()=>{
if(window.PDFJS){
console.log(this.state);
let urls = this.state.urls;
for(var i = 0;i<urls.length;i++){
let newurl = urls[i];
//let newurl = 'http://172.104.60.70/st_old/uploads/defaultdocs/7/split/1527165241-42557/1_1527165241-42557.pdf';
this.pdfLoop(newurl,i);
}
}
}
pdfLoop = (item,index) => {
var that = this;
PDFJS.getDocument(item).then(function getPdfHelloWorld(pdf) {
//
// Fetch the first page
console.log('url is : ',item);
pdf.getPage(1).then(function getPageHelloWorld(page) {
var scale = 0.5;
var viewport = page.getViewport(scale);
let cref = 'canvas'+index;
let imgref ='img'+index;
console.log('cref no : ',cref);
console.log('img no : ',imgref);
// Prepare canvas using PDF page dimensions
//
var canvas = that.canvasRefs[cref];
//let imagez = that.imageRefs[imgref];
var context = canvas.getContext('2d');
context.globalcompositeoperation = 'source-over';
// context.fillStyle = "#fff";
//draw on entire canvas
//context.fillRect( 0, 0, canvas.width, canvas.height );
canvas.height = viewport.height;
canvas.width = viewport.width;
//imagez.src = canvas.toDataURL("image/png");
//
// Render PDF page into canvas context
//
//page.render({canvasContext: context, viewport: viewport});
var task = page.render({canvasContext: context, viewport: viewport})
task.promise.then(function(){
//console.log(canvas.toDataURL('image/png'));
let imgItem = {imgref:canvas.toDataURL('image/png')}
let newState = that.state.imgsrc.concat(imgItem);
that.setState({
imgsrc:newState
});
//imagez.src = canvas.toDataURL('image/png')
});
});
});
}
componentDidMount(){
var formData = new FormData();
formData.append("filepath",this.props.item.pdfname);
let editUrl = devUrl+'trip/getpdfSplitViewtripdoc?json=true';
//this.setState({showSplitFiles:true,loading:true});
var that = this;
fetch(editUrl, {
method: "post" ,
credentials:'include',
body:formData
}).then(function(response) {
return response.json();
}).then(function(data) {
let urls = [];
for(var i = 0;i<data.files.length;i++){
let fileurl = pdfUrl+'split/'+data.dir+'/'+data.files[i];
urls.push(fileurl);
}
if(that._isMounted){
that.setState({
//splitpdfData:data,
urls
});
}
}).catch((err)=>console.log(err));
}
render(){
let canvasDiv = [];
if(this.state.urls && this.state.urls.length>0){
this.state.urls.map((item,index)=>{
let canv = <canvas key={index} style={{display:'none'}} ref={(ref) => this.canvasRefs[`canvas${index}`] = ref} > </canvas>;
canvasDiv.push(canv);
});
}
if(this.state.imgsrc.length>0){
this.state.imgsrc.map((item,index)=>{
console.log('item is : ',item);
});
}
return(
<div>
show pdf images here
{this.state.loading?<Spin style={{width:'100%',margin:"0 auto"}} tip="Loading Pdf..."/>:''}
{canvasDiv.length>0?canvasDiv:''}
{canvasDiv.length>0?this.pdfConversion():''}
</div>
)
}
}