Ich habe den unten stehenden Code verwendet, um ein Bild hochzuladen. Ich möchte nur verstehen, ob der Zugriff auf ein Element über document.querySelector ('img') eine gute Übung ist oder nicht. Da ich gehört habe, dass du nicht direkt auf dom element zugreifen solltest. Gibt es eine reaktive Möglichkeit dies zu tun?React - Wie lade ich eine Bilddatei hoch
previewFile() {
var preview = document.querySelector('img'); //selects the query named img
var file = document.querySelector('input[type=file]').files[0]; //sames as here
var reader = new FileReader();
reader.onloadend = function() {
let pic = { "url": "", val: "0" };
pic.url = reader.result;
this.picArray.push(pic);
this.setState({ pics: this.picArray });
}.bind(this);
if (file) {
reader.readAsDataURL(file); //reads the data as a URL
} else {
preview.src = "";
}
}
„Ich denke, ref kein guter Weg ist (außer es gibt keinen anderen Weg)“. Du widersprichst dir selbst. + onChange ist ein Ereignis. Es ist eine schlechte Übung, Ereignis-Listener für Nicht-Ereignis-Zwecke hinzuzufügen. + Wenn Sie sich noch für ein Ereignis entscheiden, sollten Sie in Ihrem Callback das 'file.target' und nicht 'event [0]' + in Ihrem Callback ansprechen. Die 'Datei' ist ein Verlust-Typ, der die Bindung an diesen tatsächlichen Wert garantiert Element, während refs, wenn 100% das Element bereitstellt, an dem Sie arbeiten werden. –
@LiorG "Es ist eine schlechte Übung, Ereignis-Listener für Nicht-Ereigniszwecke hinzuzufügen". Was bedeutet das überhaupt? Wie ist es eine schlechte Praxis? Wenn das Element ein Ereignis hat, das ausgelöst wird, ist es eindeutig kein Nicht-Ereignis-Zweck. Dies ist genau so, wie Sie es in React tun sollten, um Refs zu vermeiden. Dies ist auch die Art, wie 'dropZone'-Bibliotheken es tun. –
@LiorG Sorry für falsche Parameter beim onChange-Ereignis. Ich habe es repariert. –