reactjs - 在 mqtt 套接字上接收数据时,我想在 ReactNative 中重新渲染特定组件
问题描述
我正在使用 ReactNative 编写一个应用程序,以在接收到 Mqtt 套接字协议上的数据时显示热图图。
我的问题是,当我在 mqtt Socket 上接收数据时,我不知道如何只重新渲染一个特定的 Heatmap 组件。
如果我useState(data)
在接收数据时使用,则返回 function { } 很多组件将重新渲染。性能会很差。
function RenderingPage() {
// if I use this way, a lot of components will be re-rendering
// whenever receiving socket data
// const [data, setData] = useState('');
useEffect(() => {
mqttConnect();
}, []);
function mqttConnect() {
//skip connect process..
client.on('message', function (topic, data) {
// it's my data to display.
// setData(data)
}
return(
<SafeAreaView>
... a lot of components ...
// I have to pass data to this component for drawing Heatmap
<HeatMap
data={data}
/>
</SafeAreaView>
)
}
解决方案
我在路上解决了这个问题。我认为这只是一种解决方案。那就是在组件中启动 MqttConnect()。如果我想使用从 MqttConnect 接收的值,我发现我必须使用模块进行状态管理,例如上下文或 Redux..
所以,我把 mqtt 连接函数放到 Heatmap 组件中。
export default function HeatMap() {
useEffect(() => {
// when mount, run once.
let client = mqttConnect();
return () => {
//when unmount, quit mqtt.
client.end();
};
});
}
推荐阅读
- python - 如何在Python中的嵌套字典中获取层次结构下的项目?
- python - jupyter-notebook:循环打印精细表格
- javascript - 未捕获的类型错误:无法在 HTMLButtonElement.ctrlAddItem 的 Object.addItem (app.js:41) 处读取未定义的属性“长度”
- service - Helm 部署与服务
- jquery - 如何引用/修改使用 jQuery 类选择器找到的类列表中的元素
- javascript - Node.js for 循环使用以前的值?
- python - 计算最多具有 m 个偶数元素的不同子数组的数量
- sql - 如何将游标添加到 PL/SQL 块中的过程中?
- java - 代码不起作用。询问用户 2 个字符并在文本文件中搜索以这两个字符开头的字符串
- javascript - 谁能说出为什么这个 switch 语句不起作用并且总是转到 javascript 中的默认情况?