Expo环境下Stack.Navigator持续加载第二个页面且无法返回首页问题求助
老兄,我看了你的代码,发现几个关键问题导致了这个异常,咱们一个个来修复:
1. 致命的组件导入错误
这是最核心的问题!在你的App.js里,你把HomeScreen错误地导入成了SearchScreen:
import SearchScreen from './Components/SearchScreen' import HomeScreen from './Components/SearchScreen' // 这里完全错了!
这就导致HomeScreen和SearchScreen其实是同一个组件,当你尝试跳转到Shopping页面时,相当于在同一个组件之间循环跳转,导航栈直接乱掉,自然会出现持续加载、无法返回的情况。
修复方法:把HomeScreen的导入路径改成正确的文件路径:
import SearchScreen from './Components/SearchScreen' import HomeScreen from './Components/HomeScreen' // 改成你的HomeScreen组件文件路径
2. 返回逻辑的不合理用法
在SearchScreen的headerLeft里,你用navigation.navigate("SUSH")来实现返回,这其实不是“返回”,而是重新添加一个SUSH页面到导航栈,时间长了栈里会堆一堆重复页面,也会导致返回异常。
优化方式:改用navigation.goBack(),这才是标准的返回上一页的方法:
headerLeft: () => ( <TouchableOpacity onPress={() => navigation.goBack()} > <Text>Back</Text> </TouchableOpacity> ),
3. 触摸事件的小瑕疵
在HomeScreen的列表项里,你用onStartShouldSetResponder触发跳转,但这个方法需要返回布尔值来声明是否要响应触摸事件,你现在没返回值,虽然不直接导致加载问题,但可能引发奇怪的触摸行为。修正一下:
onStartShouldSetResponder={() => { this.props.navigation.navigate('Shopping', { name: 'Jane' }) return true; // 明确告知组件要处理这个触摸事件 }}
4. 冗余代码清理(可选但推荐)
SearchScreen的TextInput里重复写了两次value={value},删掉其中一个就行,不影响功能但代码更整洁:
<TextInput style={{fontSize:16,width:305,padding:8, backgroundColor:'#e6e6e6',color:'black',}} value={value} onChangeText={(searchtext) => setValue(searchtext)} placeholder={"Search"} placeholderTextColor={'#454545'} ></TextInput>
把这些问题都修复后,你的导航应该就能正常工作了:点击首页的图标或者列表项可以顺利跳转到Shopping页面,点击Back按钮也能正常返回首页,不会再出现持续加载的情况。
内容的提问来源于stack exchange,提问作者redoc01
相关产品推荐
相关产品推荐

