react-native - 如何在功能组件中使用 React Native Switch?
问题描述
我正在尝试使用react-native提供的Switch组件,但它不会切换。
function settings(props) {
let {changeView, header} = props;
let rememberPin = false;
let toggleRememberPin = (value) => {
rememberPin = value;
};
return (
<View style={styles.appContainer}>
<View style={styles.appBody}>
<View style={{flex:1, flexDirection: 'row',justifyContent:'center',alignItems:'center',width: Dimensions.get('screen').width,backgroundColor: Colors.white}}>
<Text>Remember PIN:</Text>
<Switch
onValueChange={toggleRememberPin}
value={rememberPin}
ios_backgroundColor="#aeaeae"
trackColor={{true: Colors.customerGreen, false: '#aeaeae',}}/>
</View>
</View>
</View>
);
}
我在视图中渲染了 Switch,我可以触摸它,它从 OFF 变为 ON,但突然它又回到 OFF 而不保持 ON 状态。
怎么了?
解决方案
你需要研究 React 的核心概念,尤其是组件状态是如何工作的。
简而言之,正常的变量赋值不会导致组件重新渲染和反映更改。这就是你想要使用状态概念的时候。
以下是如何正确执行此操作:
function Settings(props) {
let {changeView, header} = props;
const [rememberPin, setRememberPin] = useState(false);
const toggleRememberPin = (value) => {
setRememberPin(value);
};
return (
<View style={styles.appContainer}>
<View style={styles.appBody}>
<View style={{flex:1, flexDirection: 'row',justifyContent:'center',alignItems:'center',width: Dimensions.get('screen').width,backgroundColor: Colors.white}}>
<Text>Remember PIN:</Text>
<Switch
onValueChange={toggleRememberPin}
value={rememberPin}
ios_backgroundColor="#aeaeae"
trackColor={{true: Colors.customerGreen, false: '#aeaeae',}}/>
</View>
</View>
</View>
);
}
推荐阅读
- java - 在java中实现微批处理
- web - 使用 AMP 构建网站
- google-apps-script - 如何在应用脚本中实现 goBack 函数
- java - 在 Tomcat 服务器上运行 WAR 文件时出错
- jquery - 从多个来源获取 JSON
- node.js - 我应该每个线程都有一个新的 MongoDB 连接吗
- c - 如何控制具有多个互斥锁和条件的 pthread?
- java - 无法使用 jsp 和 servlet 打印上传文件的名称
- laravel - Laravel 将 ID 分配给 Zurb Foundation 模式
- jakarta-ee - 从属性文件中读取 dbURL、用户和密码