Мой сервер node.js отправляет с socket.io новые данные каждые 10 секунд. В моем веб-приложении я обновляю this.state каждый раз, когда мой сервер отправляет данные и принудительно обновляется с помощью forceUpdate()Обновить компонент реагирования
Однако мой компонент реагирования не обновляется, я не знаю почему. Я последовал за документ, но я что-то пропустил ...
Родитель:
class DataAnalytics extends React.Component {
constructor(props) {
super(props);
socket = this.props.socket;
this.state = {data: []};
socket.on('dataCharts', (res) => {
console.log("new data charts : "+res);
var data = JSON.parse(res);
this.setState({data: data});
this.forceUpdate();
});
}
componentWillUnmount() {
socket.off('dataCharts');
}
render() {
return (
<div id="dataAnalytics">
<Stats data={this.state.data}></Stats>
</div>
);
}
}
export default DataAnalytics;
ребенка:
class Stats extends React.Component {
constructor(props) {
super(props);
}
render() {
return (
<div className="stats" style={{textAlign:'center'}}>
<h4>Number: </h4>
</div>
);
}
componentDidUpdate() {
var data = this.props.data;
if(!jQuery.isEmptyObject(data)) {
$(".stats").html("<h4>Number : data['nb']['counterIn']</h4>");
}
}
}
export default Stats;
Каждый знает, как обновить автоматически моей Реагировать компонент.
'this.setState()' может помочь вам –
меня this.setState() в моем родительском компоненте ... Я попытался поместить его в другой метод (componentDidUpdate, componentWillMount ...), но это же результат:/ – onedkr
Ваша настройка внутри родителя выглядит корректно: данные должны быть новыми в каждом цикле, а setState() должен повторно отображать родительский + дочерний элемент, даже не требуя применения forceUpdate(). Вы уверены, что сокет работает правильно? Вы получаете несколько строк console.log? – wintvelt