मैं एक ट्यूटोरियल का अनुसरण कर रहा हूं और अभी-अभी useEffect के बारे में सीखा है। मेरी समस्या यह है कि मैं result.hours[0].is_open_now प्राप्त करना चाहता हूं। मैंने पाया है कि घटक दो बार प्रस्तुत करता है, और चूंकि घंटे पहले अपरिभाषित हैं, यह विफल हो जाता है।

क्या इसे केवल एक बार चलाने का कोई तरीका है।

const ResultsShowScreen = ({ navigation }) => {

    const id = navigation.getParam('id');
    const [result, setResult] = React.useState({})

    const getResult = async (id) => {
       const response = await yelp.get(`/${id}`)
       setResult(response.data)
    }

    useEffect(() => {
        getResult(id)
     }, [])

    if (!result || result.length <= 0) {
        return null
    }

     const {name, 
            display_address, 
            price,
            display_phone,
            photos,
            review_count,
            rating,
            hours          
        } = result

        if (hours && hours.length > 0 ) {
            const is_open_now = hours[0].is_open_now
            console.log('running')
        } else {
            console.log('nooooo')
        }

    return (
        <View> 

            <Text style={styles.title}>{name}</Text>

            <Text>Price: {price}</Text>
            <Text>Rating: {rating}</Text>
            <Text>Reviews: {review_count}</Text>
            <Text>Phone: {display_phone}</Text>
            <Text>Is Open Now: </Text>
        </View>
    )

}

export default ResultsShowScreen
0
Pegasus 28 अक्टूबर 2019, 05:47

1 उत्तर

सबसे बढ़िया उत्तर

अपने कोड का अनुसरण करने से आप useEffect को दो बार रेंडर होने से नहीं रोक सकते क्योंकि प्रतिक्रिया हुक जीवनचक्र,

यदि आप रिएक्ट क्लास के जीवनचक्र के तरीकों से परिचित हैं, तो आप यूज़इफेक्ट हुक को कंपोनेंटडिडमाउंट, कंपोनेंटडिडअपडेट और कंपोनेंटविलयूनमाउंट संयुक्त के रूप में सोच सकते हैं।

इसका मतलब है useEffect घटक पहली बार प्रस्तुत करने के बाद निष्पादित किया जाएगा (आपका कोड पहला समय शून्य है) और दूसरे तर्क में मान होने पर अधिक समय निष्पादित किया जाएगा।

अपने useEffect में, आप setState को कॉल करके नई स्थिति सेट करते हैं और यदि स्थिति बदलती है तो घटक स्वतः रेंडर हो जाता है। तो आपका घटक कम से कम दो बार प्रस्तुत किया जाएगा।

3
Hải Bùi 28 अक्टूबर 2019, 03:31