Ich versuche grundsätzlich, die Ereignislistener zu verwenden und ein Ereignis für das Ereignis 'Nachricht' hinzuzufügen, das externe Ereignisse auslöst, wenn diese App eine Webansicht in einer mobilen App ist.ReactJS-Ereignisse vom EventListener Die Ansicht nicht aktualisieren
Das Problem ist, dass die Reaktion Komponente nicht aktualisiert, wenn das Ereignis kommt. Ich kann feststellen, dass das Ereignis in meine Event-Listener-Funktion kommt jedoch buchstäblich die Reaktion Komponente nicht aktualisiert, auch wenn ich setState.
Hier ist mein Code:
import React, { Component } from 'react';
import logo from './logo.svg';
import './App.css';
var showIfEventHappenedAndReactUpdated = false;
class App extends Component {
componentDidMount() {
//event listener to get events from external views
//when this app is used as a webview for example
document.addEventListener('message', function(e){
//I can see the event coming through here
//However, the react component itself doesn't update
showIfEventHappenedAndReactUpdated = true;
//I have even tried putting a this.setState({}) here but it doesn't work...as it doesn't update the react-component
})
}
render() {
if(showIfEventHappenedAndReactUpdated){
return (
<div className="App">
<p>Event Occured and React Updated</p>
</div>
);
}else{
return (
<div className="App">
<p>Event DID NOT OCCUR YET</p>
</div>
);
}
}
}
export default App;
aber wenn ich die 'p' Tag intern wie diese
import React, { Component } from 'react';
import logo from './logo.svg';
import './App.css';
class App extends Component {
componentDidMount() {
//event listener to get events from external views
//when this app is used as a webview for example
document.addEventListener('message', function(e){
document.getElementsByTagName('p')[0].innerHTML = "EVENT OCCURED"
})
}
render() {
return (
<div className="App">
<p>Event HAS NOT Occured</p>
</div>
);
}
}
}
export default App;
DANN es funktioniert bekommen. Die einzige Linie Änderung war
document.getElementsByTagName('p')[0].innerHTML = "EVENT OCCURED"
Ich brauche aber die Ansicht reagiert tatsächlich zu aktualisieren, anstatt den Text innerhalb eines rohen DOM-Elements zu ändern.
Was muss ich tun, um das zu erreichen?
Ich habe nicht gestartet ReactJS noch, aber ich habe Dokument gelesen und festgestellt, dass React Render DOM (React Component), wenn Zustand Eigenschaften ändert, so wenn Sie verwenden Ereignis Listener als Komponente wird nicht geändert. Sie müssen jeden Zustandswert aktualisieren und es funktioniert gut. –
@YogeshPatel Ich habe versucht, this.setState ({}) noch nicht aktualisiert die Komponente –