【问题标题】:Orders are not displaying on first render but when I press Ctrl+S(Save) orders are displayed订单未在第一次渲染时显示,但当我按 Ctrl+S(保存)时,订单会显示
【发布时间】:2021-06-30 15:50:26
【问题描述】:
import React, {useEffect} from 'react';
import {View, Text, StyleSheet, FlatList, TouchableOpacity} from 'react-native';
import Card from '../components/Card';
import {useState} from 'react';
 
import {useIsFocused} from '@react-navigation/native';
import AsyncStorage from '@react-native-async-storage/async-storage';
 
const Orders = ({route, navigation}) => {
 const [userID, setUserID] = useState('');
 const [orders, setOrders] = useState([]);
 const isFocused = useIsFocused();
 
 async function getData() {
   try {
     const value = await AsyncStorage.getItem('UserID');
     if (value !== null) {
       console.log('USERID is ' + value);
       setUserID(value);
     }
   } catch (e) {}
 }
 
 function fetchOrders() {
   fetch(
     'https://somewebsite/product/GetOrdersByUserID?userid=' +
       //'1249b39a-ded0-4522-a263-f905ac30e5a3',
       userID,
   )
     .then(response => response.json())
     .then(responseJson => {
       setOrders(responseJson);
     })
     .catch(error => {
       console.error(error);
     });
 }
 getData();
 
 useEffect(() => {
    //getData();
   fetchOrders();
   console.log('UserID inside useffect:: ' + userID);
 
   console.log('inside useEffect');
 }, [isFocused]);
 
 return (
   <View>
     <View style={styles.container}>
       <FlatList
         scrollEnabled={true}
         data={orders}
         renderItem={({item}) => (
           <TouchableOpacity
             onPress={() => {
               navigation.navigate('OrderDetails', {
                 orderID: item.id,
               });
             }}>
             <View style={styles.viewPP}>
               <Card style={styles.cardPP}>
                 <Text style={styles.text}>Order ID:{item.id}</Text>
                 <Text style={styles.text}>Total: ₹{item.total}</Text>
                 <Text style={styles.text}>Placed: {item.placed}</Text>
                 <Text style={styles.text}>Status: Delivered</Text>
               </Card>
             </View>
           </TouchableOpacity>
         )}></FlatList>
     </View>
   </View>
 );
};
const styles = StyleSheet.create({
 container: {
   padding: 10,
 },
 
 text: {
   fontWeight: 'bold',
   alignContent: 'center',
 },
 cardPP: {
   margin: 10,
 },
});
export default Orders;

我的问题是我在第一次渲染时没有获得用户 ID,但是当我按下 Ctrl+S(保存操作)时,我能够获得用户 ID,因此会显示订单。 我的问题是我无法在第一次渲染时获取用户 ID。 我已经尝试过 console.log(UserID) 并且第一次是空白的,如上所述。 当我在 fetchOrders() 中的“https://somewebsite/product/GetOrdersByUserID?userid=”中直接将 UserID 设置为 1249b39a-ded0-4522-a263-f905ac30e5a3 时,订单在第一次渲染时显示没有任何问题。 请帮帮我。

【问题讨论】:

    标签: javascript reactjs react-native react-navigation hybrid-mobile-app


    【解决方案1】:

    状态更新不是同步的。就像你调用 setUserId 一样,它不会同步设置状态,让你立即使用它。它在内部通过 React 进行异步管理。如果您遵循您的承诺并传递参数等,那就更好了。如果我错过了什么,请告诉我

    const Orders = ({route, navigation}) => {
     const [userID, setUserID] = useState('');
     const [orders, setOrders] = useState([]);
     const isFocused = useIsFocused();
     
     async function getData() {
       try {
         const value = await AsyncStorage.getItem('UserID');
         if (value !== null) {
           console.log('USERID is ' + value);
           setUserID(value);
           return value;
         }
         throw new ReferenceError("UserID is null");
    
       } catch (e) {
         return '';
       }
     }
     
     function fetchOrders(userId) {
       fetch(
         'https://somewebsite/product/GetOrdersByUserID?userid=' +
           //'1249b39a-ded0-4522-a263-f905ac30e5a3',
           userID,
       )
         .then(response => response.json())
         .then(responseJson => {
           setOrders(responseJson);
         })
         .catch(error => {
           console.error(error);
         });
     }
     
     useEffect(() => {
       getData()
       .then((v) => fetchOrders(v));
     }, [isFocused]);
    

    【讨论】:

    • 非常感谢。这对我有帮助。
    猜你喜欢
    • 2012-09-02
    • 2013-02-27
    • 2014-04-05
    • 2022-10-01
    • 2021-05-22
    • 2017-06-04
    • 2015-07-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多