Как получить полезную нагрузку в другом действии - PullRequest
0 голосов
/ 04 февраля 2019

я проверяю наличие данных для входа в систему и, если успех, я публикую работу .... я хочу извлечь данные полезной нагрузки из действия входа в другое действие.Ниже приведен мой код действия и код редуктора для входа.я хочу получить в действии 'createjob' редукс

 const signin = (cred) => {
return (dispatch, getState, {getFirebase, getFirestore}) => {
    const firestore = getFirestore();
    var query = firestore.collection('Employers').where("email", "==", cred.email)
    query = query.where("password", "==", cred.password)
    .get()
    .then((querySnapshot) => {
        querySnapshot.forEach(function(doc) {
            // Check if a document was returned
        if(querySnapshot.empty === true) {
           dispatch({type: 'SIGN_IN_ERROR', cred});
        }
        // doc.data() is never undefined for query doc snapshots
            console.log(doc.id, " => ", doc.data());
            email = cred.email
            empname=doc.data().FirstName; 
            dispatch({type:'SIGN_IN', cred, payload:{cred, empname, email}});
            history.push('/dashboard')
        });
    }) 
    .catch((err) => {
        console.log("No record");
        dispatch({type:'SIGN_IN_ERROR', err});
    });

}
};

мой код редуктора

const signin = (state = initState, action) => {

switch(action.type){
    case 'SIGN_IN':

    const empname = action.payload;
    console.log('====================================');
    console.log(empname, action.cred.email);
    console.log('====================================');
    return {
        ...state,
    authError : null,
    }    
    case 'SIGN_IN_ERROR':
    console.log('sign in error ',action.err);
    return {
        ...state,
        authError : 'Login Failed'
    }
    default:
    return state;
}
 }

export default signin;

я хочу получить в следующем действии

 const createJob = (project) => {
return (dispatch, getState, {getFirebase, getFirestore}) => {
    const firestore = getFirestore();
    const empname = signin.action.payload;
    const email = signin.action.payload;
    var query = firestore.collection('Employers').where("email", "==", email)
    firestore.collection('Jobs').add({
        ...project,
        postedby:empname,
        postedon: new Date()

    }).then(()=>{
        dispatch({type:'CREATE_JOB', project});
    }).catch((err)=>{
        dispatch({type:'CREATE_JOB_ERROR', err});
    })
}
};

Ответы [ 2 ]

0 голосов
/ 04 февраля 2019

Поскольку вы уже отправляете полезную нагрузку с помощью действия SIGN_IN, вы можете сохранить эти данные в хранилище, а с помощью действия createJob с помощью getState вы можете прочитать полезную нагрузку из хранилища

const signin = (state = initState, action) => {

    switch(action.type){
        case 'SIGN_IN':
        const empname = action.payload;
        console.log('====================================');
        console.log(empname, action.cred.email);
        console.log('====================================');
        return {
            ...state,
            empname,
            authError : null,
        }    
        case 'SIGN_IN_ERROR':
          console.log('sign in error ',action.err);
          return {
            ...state,
            authError : 'Login Failed'
          }
        default:
        return state;
    }
 }

 export default signin;

const createJob = (project) => {

    return (dispatch, getState, {getFirebase, getFirestore}) => {
        const firestore = getFirestore();
        const empname = getState().signin.empname; // getting from reducer 
        const email = signin.action.payload;
        var query = firestore.collection('Employers').where("email", "==", email)
        firestore.collection('Jobs').add({
            ...project,
            postedby:empname,
            postedon: new Date()

        }).then(()=>{
            dispatch({type:'CREATE_JOB', project});
        }).catch((err)=>{
            dispatch({type:'CREATE_JOB_ERROR', err});
        })
    }

};
0 голосов
/ 04 февраля 2019

В этом случае вы можете написать промежуточное промежуточное программное обеспечение, которое дает доступ ко всему хранилищу в любой момент отправки действия.

...