Redux Store, Акции - PullRequest
       34

Redux Store, Акции

1 голос
/ 12 февраля 2020

Я пытаюсь реализовать Аутентификацию Google с использованием GAPI и хочу сохранить идентификатор пользователя, выбранный GAPI, в хранилище с избыточностью. Я не знаю, как передать переменные компонента класса в хранилище избыточности или диспетчер действий. Может кто-нибудь помочь мне выбраться из этого?

import { SIGN_IN, SIGN_OUT } from './types'
export const signIn = (dispatch, userId) => {
    console.log('actions',userId)
    dispatch(
        {
            type: SIGN_IN,
            payload:userId
        }
    )
}

export const signOut = (dispatch) => {
    dispatch(
        {
            type: SIGN_OUT
        }
    )
}

const mapStateToProps = (state,ownProps) => {
    return {
        isSignedIn: state.auth.isSignedIn
    }
}

const mapDispatchToProps = (dispatch, ownProps) => {
  
    return {
        SignIn: () => signIn(dispatch),
        SignOut: () => signOut(dispatch)
    }
}

export default connect(mapStateToProps, mapDispatchToProps)(GoogleAuth);

Ответы [ 3 ]

0 голосов
/ 12 февраля 2020

Вы можете передать значение, когда фактически отправляете действие. как только у вас есть идентификатор пользователя, который вы делаете

this.props.SignIn(userId)

, это вызовет отправку действия, в которой вы должны передать значение типа

const mapDispatchToProps = (dispatch, ownProps) => {

return {
    SignIn: (id) => signIn(dispatch,id),
    SignOut: () => signOut(dispatch)
}
}
0 голосов
/ 12 февраля 2020
export const signIn = (userId) => {
    return {
        type: SIGN_IN,
        payload: userId
    };
};

export const signOut = () => {
    return {
        type: SIGN_OUT
    };
};

Для вашего компонента GoogleAuth:

componentDidMount() {
    window.gapi.load('client:auth2', () => {
        window.gapi.client.init({
            clientId: 'YOUR_CLIENT_ID',
            scope: 'email'
        }).then(() => {
            this.auth = window.gapi.auth2.getAuthInstance();    //Assign the auth instance
            this.onAuthChange(this.auth.isSignedIn.get());      //Update the auth state in store
            this.auth.isSignedIn.listen(this.onAuthChange);     //Wait for the auth state to change in future
        });
    });
}

onAuthChange = (isSignedIn) => {
    if (isSignedIn) {
        this.props.signIn(this.auth.currentUser.get().getId());
    } else {
        this.props.signOut();
    }
};
const mapsStateToProps = (state) => {
    return { isSignedIn: state.auth.isSignedIn };
}

export default connect(mapsStateToProps, { signIn, signOut })(GoogleAuth);
0 голосов
/ 12 февраля 2020

SignIn: () => signIn (dispatch, ownProps.toString ()),

Я думаю, это должно быть

Вход: (значение ) => вход в систему (отправка, значение),

...