我基本上是尝试使用事件侦听器并为'message'事件添加一个事件,当该应用程序是某个移动应用程序中的webview时,该事件获取外部事件。ReactJS来自EventListener的事件不要更新视图
问题是当事件进来时,反应组件不会更新。我可以确定该事件确实进入了我的事件监听器函数,但是,即使我做了setState,反应组件也不会更新。
这里是我的代码:
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;
,但如果我得到的 'P' 标签内部这样
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;
然后它工作。唯一的线变化是
document.getElementsByTagName('p')[0].innerHTML = "EVENT OCCURED"
不过,我需要实际更新视图作出反应,而不是改变原始的DOM元素中的文字。
为了实现这个目标我需要做些什么?
我还没有开始ReactJS但我已阅读文档,并发现当状态属性更改时,React将呈现DOM(React Component),因此如果您使用的事件侦听器比组件不会更改。你必须更新任何状态值并且工作正常。 –
@YogeshPatel我试着做this.setState({})但它仍然没有'更新组件 –