【问题标题】:Reverse order of JavaScript functions - react nativeJavaScript 函数的逆序 - React Native
【发布时间】:2022-11-18 15:06:32
【问题描述】:

我正在尝试计算一秒钟内按下按钮的次数。

它在工作,在大多数情况下,它会跟踪并输出它。

但问题是它输出的是上一秒而不是当前秒的按钮按下次数。

我认为如果以某种方式颠倒顺序会起作用,我该如何修复这些功能?谢谢。

    const [clicksPerSecond, setClicksPerSecond] = useState(0);
    const [tempCounter, setTempCounter] = useState(0);
    const [tempCounter2, setTempCounter2] = useState(0);
    const { setCounter, counter } = useContext(CountContext);
    const delay = ms => new Promise(res => setTimeout(res, ms));

    const cpsFunction = async (temp) => {
        if (temp == 1) {
            await delay(1000);
            setClicksPerSecond(tempCounter2);
            setTempCounter(1);
            console.log('Clicks per second final: ' + tempCounter2);
        } else {
            setTempCounter2(temp);
            console.log('Clicks per second: ' + temp);
        }
    }

    useEffect(() => {
        cpsFunction(tempCounter);
        setTempCounter(tempCounter + 1);
    }, [counter])
return (
        <View style={[styles.container, { backgroundColor: colors.background }]}>
            <View elevation={7.5} style={{ backgroundColor: colors.background, borderRadius: 500 }}>
                <TouchableOpacity
                    onPress={() => setCounter(counter + 1)}
                    style={[styles.counterButton, { backgroundColor: colors.primary, borderColor: colors.container, borderWidth: 0 }]}>
                    <Text></Text>
                    <Text style={{ fontSize: 60 }}>{counter}</Text>
                    <Text>{clicksPerSecond} CPS</Text>
                </TouchableOpacity>
            </View>
        </View>
    );
}

【问题讨论】:

  • 你能解释更多关于输出的信息吗
  • 老实说,我不知道还有什么可以解释的,输出是动态显示当前计数,但是当它显示第二秒的总计数时,它显示前一秒,所以它在计数时落后 1 秒

标签: javascript reactjs react-native


【解决方案1】:

您可以改为只增加计数并在一秒钟后减少它。

export default function App() {
  const [clicks, setClicks] = React.useState(0);

  const onClick = () => {
    setClicks((c) => c + 1);
    setTimeout(() => setClicks((c) => c - 1), 1000);
  };

  return (
    <div>
      <button onClick={onClick}>Click me</button>
      <p>Clicked {clicks} times</p>
    </div>
  );
}

您还需要跟踪组件在递减之前是否已卸载,我认为您可以使用 refs 来完成。 Example

【讨论】:

  • 但问题不在于它的 1 数字太高,而是它显示的是 1 秒前而不是现在的总计数
猜你喜欢
  • 1970-01-01
  • 2016-12-26
  • 1970-01-01
  • 2023-03-20
  • 2019-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-19
相关资源
最近更新 更多