如何在另一个Redux的行动取得有效载荷

问题描述 投票:0回答:2

IM检查登录,如果成功的IM发布作业的数据存在....我想从签到动作到另一个动作检索的有效载荷数据。以下是“登入”我的动作代码和减速代码。我想在“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});
    })
}
};
reactjs redux react-redux
2个回答
0
投票

你可以写在这种情况下,在调度的作用的任何点可以访问整个商店终极版中间件。


0
投票

既然你已经调度与SIGN_IN行动的有效载荷,可以存储使用的getState存储和createJob的行动,你的数据从的CanRead店净荷

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});
        })
    }

};
© www.soinside.com 2019 - 2024. All rights reserved.