Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用react native在文本视图中连续显示传感器值_Javascript_Android_Reactjs_React Native - Fatal编程技术网

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中使用它。