Javascript 使用react native在文本视图中连续显示传感器值
在下面的代码中,我试图获取加速计值和时间戳,并在文本视图中显示它们。如果我注释掉行Javascript 使用react native在文本视图中连续显示传感器值,javascript,android,reactjs,react-native,Javascript,Android,Reactjs,React Native,在下面的代码中,我试图获取加速计值和时间戳,并在文本视图中显示它们。如果我注释掉行setVal(timestamp),那么console.log({x,y,z,timestamp})显示的值是正确的(如预期的那样)。但是,如果我取消注释setVal(timestamp),那么随着时间的推移,console.log显示的值最终会变得完全相同 不知道我做错了什么。我猜setVal(timestamp)以某种方式覆盖了变量timestamp的值。有没有更正确、更好的方法 import React, {
setVal(timestamp)
,那么console.log({x,y,z,timestamp})
显示的值是正确的(如预期的那样)。但是,如果我取消注释setVal(timestamp)
,那么随着时间的推移,console.log
显示的值最终会变得完全相同
不知道我做错了什么。我猜setVal(timestamp)
以某种方式覆盖了变量timestamp
的值。有没有更正确、更好的方法
import React, { useState } from "react";
import {View, Text} from 'react-native';
import {accelerometer} from 'react-native-sensors';
export default function App(props) {
const [val, setVal] = useState(1);
const subscription = accelerometer.subscribe(({x, y, z, timestamp}) => {
console.log({x, y, z, timestamp});
setVal(timestamp);
});
return (
<View>
<Text>Timestamp: {val}</Text>
</View>
);
}
import React,{useState}来自“React”;
从“react native”导入{View,Text};
从“react native sensors”导入{Accelerator};
导出默认功能应用程序(道具){
const[val,setVal]=useState(1);
常量订阅=加速计。订阅({x,y,z,timestamp})=>{
log({x,y,z,timestamp});
setVal(时间戳);
});
返回(
时间戳:{val}
);
}
如果不调用setVal(timestamp),则不会重新加载。但当你把这条线放进去时,它会不断地重播。
尝试这样替换代码。因此,订阅是一次又一次地完成的
useEffect(()=> {
const subscription = accelerometer.subscribe(({x, y, z, timestamp}) => {
console.log({x, y, z, timestamp});
setVal(timestamp);
})},[])
是否可以尝试在
useffect
中使用空数组作为依赖项来设置订阅?我认为问题可能是因为您正在使用useEffect在每个renderIt中创建一个新的订阅。这是否意味着不使用useEffect,也可以将组件应用程序定义为一个类,只在构造函数中执行一次订阅?componentdidmount是useEffect的复制,带有空括号[]。所以最好在componentdidmount中使用它。你可以在constructor中使用它。