【发布时间】:2020-02-20 22:56:57
【问题描述】:
周四好人,我有下一个代码:
const Variables = (props) => {
const { activeVariable, mqttClient, updateRealTime } = props
const [live] = useState(true)
useEffect(() => {
if (live && mqttClient) {
// HERE I SUBSCRIBE TO TOPIC
mqttClient.subscribe('variables_realtime')
mqttClient.on('message', (topic, data) => {
if (topic === 'variables_realtime') {
const newData = JSON.parse(data.toString())
console.log(topic, newData)
updateRealTime(newData)
}
})
}
else mqttClient.unsubscribe('variables_realtime')
}, [mqttClient, updateRealTime, live])
useEffect(() => {
return () => {
// HERE I WANT TO UNSUBSCRIBE WHEN THE COMPONENT UNMOUNT
mqttClient.unsubscribe('variables_realtime')
}
}, [mqttClient])
return (...)
}
所以我的问题是当我更改为 react-router-dom 的其他路由时,会发生 UNSUBSCRIPTION 但是当我返回此路由时,订阅会发生两次......我不知道为什么
也许我需要对 didMount、willUnmount 等使用旧的反应方式?
【问题讨论】:
标签: reactjs react-redux react-hooks mqtt