react-native - navigation.navigate() 在本机反应中与 setState() 不同时工作
问题描述
我在 react native 应用程序的底部创建了一个导航栏,该导航栏运行良好,直到我添加了更改单击的图标和文本颜色的功能。
我可以让导航在没有颜色变化的情况下工作,并且我可以在没有navigation.navigate() 的情况下让颜色变化顺利运行,但由于某种原因我不能同时进行这两种操作。
当我将两者结合在一起时,navigation.navigate 可以工作,但颜色至少落后 1 次。
我以为我可以通过更新选项卡状态然后触发 useEffect 导航到单击的选项卡来触发颜色更改,但这不起作用。
我尝试了上下文,但没有任何运气,这对于如此简单的功能来说是不必要的。图我一定遗漏了一些我没有看到的明显东西。
import React, {useEffect, useState} from "react";
import { StyleSheet, Text, View, TouchableWithoutFeedback } from 'react-native';
import { useNavigation } from '@react-navigation/native';
const stylesCustom = StyleSheet.create({
navItemView: {
position: 'relative',
bottom: 10,
display: 'flex',
alignItems: 'center'
},
colorPink: {
color: 'pink'
}
});
const MainContent = () => {
const navigation = useNavigation();
const [tab, setTab] = useState('Home')
const [loaded, setLoaded] = useState(false);
useEffect(() => {
if(loaded) {
navigation.navigate(tab);
}
setLoaded(true);
}, [tab])
return (
<View style={[ stylesCustom.mainContainer ]}>
<TouchableWithoutFeedback onPress={() => setTab('Home')}>
<View style={[stylesCustom.navItemView]}>
<Icon name='home-outline' type='material-community' color={`${tab === 'Home' ? 'pink' : '#757781'}`} size={35} />
<Text style={tab === 'Home' ? [ styles.fontSmall, styles.textGray, styles.mt5, stylesCustom.colorPink] : [styles.fontSmall, styles.textGray, styles.mt5 ]}>Home</Text>
</View>
</TouchableWithoutFeedback>
<TouchableWithoutFeedback onPress={() => setTab('Grow')}>
<View style={[stylesCustom.navItemView]}>
<Icon name='flower-outline' type='material-community' color={`${tab === 'Grow' ? 'pink' : '#757781'}`} size={35} />
<Text style={tab === 'Grow' ? [ styles.fontSmall, styles.textGray, styles.mt5, stylesCustom.colorPink] : [styles.fontSmall, styles.textGray, styles.mt5 ]}>Grow</Text>
</View>
</TouchableWithoutFeedback>
<TouchableWithoutFeedback onPress={() => setTab('Events')}>
<View style={[stylesCustom.navItemView]}>
<Icon name='calendar-clock' type='material-community' color={`${tab === 'Events' ? 'pink' : '#757781'}`} size={35} />
<Text style={tab === 'Events' ? [ styles.fontSmall, styles.textGray, styles.mt5, stylesCustom.colorPink] : [styles.fontSmall, styles.textGray, styles.mt5 ]}>Events</Text>
</View>
</TouchableWithoutFeedback>
</View>
);
}```
解决方案
推荐阅读
- c - 如何拆分字符串并将其转换为整数?
- spring-boot - Springboot 清除执行器指标数据
- azure - 批量上传时触发一次 Azure 函数
- python - 与产出数据大小有关的产出开销
- c# - Visual Studio Code 中的实体框架错误
- angular - 如何从 Angular12 中的 NgbModal 发出 EventEmitter?
- firebase - Firebase 身份验证,错误:NoSuchMethodError:在 null 上调用了方法“登录”
- image - (有效原因)在 Preload 之外加载图像(p5js)
- python - 如何将pynput的键盘监听器隔离到一个窗口
- python - 信号量不限制并发执行的数量