在本机反应中抵消一个
counter off by one in react native
我在 react-native 中有一个计数器增量器,使用 useState.Whenever 我按下一个按钮,计数应该增加 1。它工作正常但是当第一次按下时计数器仍然为 0 当第二次按下时计数器增加一个并且继续顺利没有问题。为什么它不在第一次按下时更新?这是代码:
import { StatusBar } from 'expo-status-bar';
import React, {useState } from 'react';
import { StyleSheet, Text, View, Button } from 'react-native';
export default function App() {
const [count, setCount] = useState(0);
const [outputState, setOutputState] = useState(`You have tapped ${count} times`);
const getFinalResult = () => {
setCount(count => count + 1);
setOutputState(`You have tapped ${count} times`);
}
return (
<View style={styles.container}>
<Text>{outputState}</Text>
<Button title="change text" onPress={getFinalResult} />
<StatusBar style="auto" />
</View>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: '#fff',
alignItems: 'center',
justifyContent: 'center',
},
});
此代码适合您。您正在同时设置状态和显示。设置状态是异步任务,需要一些时间才能完成。
import { StatusBar } from 'expo-status-bar';
import React, {useState } from 'react';
import { StyleSheet, Text, View, Button } from 'react-native';
export default function App() {
const [count, setCount] = useState(0);
return (
<View style={styles.container}>
<Text>You have tapped {count} times</Text>
<Button title="change text" onPress={() => setCount(count => count + 1)} />
<StatusBar style="auto" />
</View>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: '#fff',
alignItems: 'center',
justifyContent: 'center',
},
});
我在 react-native 中有一个计数器增量器,使用 useState.Whenever 我按下一个按钮,计数应该增加 1。它工作正常但是当第一次按下时计数器仍然为 0 当第二次按下时计数器增加一个并且继续顺利没有问题。为什么它不在第一次按下时更新?这是代码:
import { StatusBar } from 'expo-status-bar';
import React, {useState } from 'react';
import { StyleSheet, Text, View, Button } from 'react-native';
export default function App() {
const [count, setCount] = useState(0);
const [outputState, setOutputState] = useState(`You have tapped ${count} times`);
const getFinalResult = () => {
setCount(count => count + 1);
setOutputState(`You have tapped ${count} times`);
}
return (
<View style={styles.container}>
<Text>{outputState}</Text>
<Button title="change text" onPress={getFinalResult} />
<StatusBar style="auto" />
</View>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: '#fff',
alignItems: 'center',
justifyContent: 'center',
},
});
此代码适合您。您正在同时设置状态和显示。设置状态是异步任务,需要一些时间才能完成。
import { StatusBar } from 'expo-status-bar';
import React, {useState } from 'react';
import { StyleSheet, Text, View, Button } from 'react-native';
export default function App() {
const [count, setCount] = useState(0);
return (
<View style={styles.container}>
<Text>You have tapped {count} times</Text>
<Button title="change text" onPress={() => setCount(count => count + 1)} />
<StatusBar style="auto" />
</View>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: '#fff',
alignItems: 'center',
justifyContent: 'center',
},
});