اذهب إلى المحتوى
  • 0

ما سبب مشكلة Cannot set headers after they are sent to the client في مشروع React Native

Abdelrahman Mostafa10

السؤال

يظهر هذا الخطأ عندما أحاول تسجيل الدخول:

beckend.PNG.bdf63efe09d39d325758575b078ee7c8.png.2b0ea691868e54bf9f78fff9c37c6ee4.png

client.PNG.e314123e6de1216a433b01eeb1e01d32.png.5c6134bc978602bda832973a4f8ed801.png

وذلك هو ملف SignIn.js :

import React ,{useState,useEffect} from  'react';
import {ScrollView,KeyboardAvoidingView,View} from 'react-native';
import AsyncStorage from '@react-native-async-storage/async-storage';
import axios from '../config/axios';
import {SIGNIN_URL} from '../config/urls';
import Inbut from './compononts/Inbut';
import ScreenTitle from './compononts/ScreenTitle';
import styles from './styles/authStyles';
import { AntDesign } from '@expo/vector-icons';
import Button from './compononts/Button';
import container from './compononts/container';
import Alert from './compononts/Alert';
import Loader from './compononts/Loader';

function SignInScreen (props){
  const [email,setEmail]=useState('');
  const [password , setPassword]=useState('');
const [isLoading ,setLoading]=useState(false);
const [alert , setAlert]=useState({message:null,type:''});

useEffect(()=>{
    const timer=setTimeout(()=>{
     setAlert({messages:null});

    },3000);
    return ()=>clearTimeout(timer);
},[alert.message]);

const changeEmailHandeler=(value)=>{
    setEmail(value);
}
const changePasswordHandeler=(value)=>{
    setPassword(value);
}

const validate =()=>{
    
     let validationError=[];
     let passed=true;
    
     if(!email){
        validationError.push("الرجاء إدخال البريد الإلكتروني ");
        passed=false;
    }
    if(!password){
        validationError.push("الرجاء إدخال كلمة السر  ");
        passed=false;
    }
    
    
    if(validationError.length>0){
        setAlert({message:validationError,type:'danger'});
    }
return passed ;
}

const _SignIn=()=>{
(async()=>{
    if (!validate())return;
    setLoading(true);
    try{
const response= await axios.post(SIGNIN_URL,{email,password});
console.log({email,password});
  setLoading(false);
  setEmail('');
  setPassword('');
  AsyncStorage.setItem('accessToken',response.data.accessToken);
  console.log(data);
    }catch(e){
setLoading(false);
setAlert({messages:e.response.data.message,type:'danger'});
    }
})();



}



return (
  <ScrollView  contentContainerStyle={{paddingVertical:40}}>
    <Loader title="جاري تسجيل الدخول  " loading={isLoading} ></Loader>
    <Alert messages={alert.message} type={alert.type}></Alert>
    
     <View  style={styles.container} >
     <View style={styles.log}>
     <ScreenTitle title="سجل دخولك " ></ScreenTitle>
            <AntDesign style={styles.Ant} name="login" size={60} color="blue"  />
     </View>

<View>
    <KeyboardAvoidingView>
            <Inbut
            placeholder="البريد الالكتروني " 
            value={email} 
            onChangeText={changeEmailHandeler}

            />
            <Inbut
            placeholder="كلمة المرور   "
            value={password} 
            secureTextEntry
            onChangeText={changePasswordHandeler}
            />
            <Button
             text="تسجيل الدخول "
             onPress={_SignIn}
            ></Button>
            <Button 
            text="أنشئ حسابك  "
            onPress={()=>props.navigation.navigate('SignUp')}
            ></Button>
          
    </KeyboardAvoidingView>


</View>

</View>




    </ScrollView>

)


}
export default SignInScreen;

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0

السلام عليكم ,
هذا الخطأ لا يحدث بسبب مشكلة في react-native بل أنة خطا يحدث من الback-end 
فاذا كنت تستخدم express على سبيل المثال فيجب مراعاة ارسال response واحد فقط داخل الcontroller .
إذا حاولت إرسال أكثر من response سوف تواجة ذلك الخطأ .
أحيانا يكون هناك middlewares أو nested-functions موجودة داخل الcontroller تقوم بارسال الresponse 
فيحب مراجعة ذلك و التأكد من إرسال response واحد فقط .

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...