【发布时间】:2021-05-18 12:02:33
【问题描述】:
我有一个 Routes 组件,它根据 user 状态返回 Stack.Screen 路由,或者根据来自上下文的 loading 状态返回加载屏幕。
由于某种原因,当调用navigation.nagivate 更改屏幕时,它只是重定向回initialRouteName 的任何位置。
我怀疑这是因为加载器没有返回任何路由,并且 navigation.navigate 调用在某处丢失,但我不确定。
MVCEhttps://codesandbox.io/s/morning-glitter-b8w5j?file=/src/App.js
Routes.js
function Routes() {
const { loading } = useContext(AppContext);
const { user } = useContext(AuthContext);
if (loading) {
return <Text>Loading</Text>;
}
return (
<NavigationContainer>
{user ? (
<Stack.Navigator initialRouteName="Home">
<Stack.Screen name="Home" component={HomeScreen} />
<Stack.Screen name="Order" component={OrderScreen} />
</Stack.Navigator>
) : (
<Stack.Navigator initialRouteName="Login">
<Stack.Screen name="Login" component={LoginScreen} />
</Stack.Navigator>
)}
</NavigationContainer>
);
}
OrderScreen.js(有问题的路线不起作用)
function OrderScreen({ order_id }) {
const { order, getOrder } = useContext(OrderContext);
useEffect(() => {
getOrder(order_id);
});
return (
<View>
<Text>Order</Text>
<Text>{order}</Text>
</View>
);
}
OrderProvider.js(调用getOrder)
const OrderContext = createContext({});
function OrderProvider({ children }) {
const [order, setOrder] = useState(null);
const { setLoading } = useContext(AppContext);
return (
<OrderContext.Provider
value={{
order,
setOrder,
getOrder: (orderId) => {
setLoading(true);
setTimeout(() => {
setOrder(orderId);
setLoading(false);
}, 1000);
}
}}
>
{children}
</OrderContext.Provider>
);
}
【问题讨论】:
标签: javascript reactjs react-native react-navigation