Как инициализировать экземпляр firebase в действии создателя в реаги? - PullRequest
0 голосов
/ 10 января 2019

Я пытаюсь инициализировать firebase с помощью getFirebase () в создателе действий в моем приложении реакции. Тем не менее, я получаю Cannot read property 'getFirebase' неопределенного.

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

Пожалуйста, обратитесь к создателю действия ниже:

export const signIn = (credentials) => (dispatch, getState, { getFirebase }) => {

    const firebase = getFirebase();

    firebase.auth().signInWithEmailAndPassword(
        credentials.email,
        credentials.password
    ).then(() => {
        dispatch({type: 'LOGIN_SUCESS'});
    }).catch((error) => {
        dispatch({type: 'LOGIN_ERROR', error});
    });
}

Пожалуйста, обратитесь в магазин ниже:

import {createStore, combineReducers, applyMiddleware} from 'redux';
import userReducer from '../reducers/user';
import { firebaseReducer } from 'react-redux-firebase';
import thunk from 'redux-thunk';

export default () => {

    const store = createStore(
    combineReducers({
        user: userReducer,
        firebase: firebaseReducer
    }),
    compose(
        applyMiddleware(
          thunk.withExtraArgument(getFirebase)
        )
    )

    // window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__()
);

    return store;
}

Пожалуйста, обратитесь к файлу конфигурации ниже:

import firebase from 'firebase/app';
import 'firebase/auth';


// initializing firebase
const config = {
    apiKey: theapikey,
    authDomain: "*****",
    databaseURL: "*****",
    projectId: "****",
    storageBucket: "****",
    messagingSenderId: "****"
  };

  firebase.initializeApp(config);

  export default firebase; 

Пожалуйста, помогите! Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 10 января 2019

Прежде всего, не размещайте здесь свой apikey проекта firebase и другие подробности конфигурации.

Я считаю, что лучше взаимодействовать с хранилищем с вашими компонентами приложения с помощью управления состоянием, а не связывать непосредственно базу данных с хранилищем. Скорее используйте методы / функции firebase в ваших компонентах, а затем управляйте состоянием в соответствии с ответом от firebase. Вы можете выполнить следующие шаги, чтобы использовать firebase auth:

  • экспортируйте аутентификацию или другие функции, которые могут вам понадобиться в Firebase.js, а не экспортируйте саму firebase следующим образом:

    import * as firebase from 'firebase'; var config = { ......... } firebase.initializeApp(config); export const database = firebase.database().ref('whatever'); export const auth = firebase.auth(); export const googleProvider = new firebase.auth.GoogleAuthProvider(); export const twitterProvider = new firebase.auth.TwitterAuthProvider();

  • Затем в вашем Action js вы можете определить функцию входа в систему, импортировав auth из firebase.js и экспортировав getUser:

    export function getUser() { return dispatch => { dispatch({ type: USER_STATUS, payload: true }); auth.onAuthStateChanged(user => { dispatch({ type: GET_USER, payload: user }); dispatch({ type: USER_STATUS, payload: false }); }); }; export function login(email, password) { return dispatch => auth.signInWithEmailAndPassword(email, password); }

  • Затем в компоненте входа js в поле submit вызовите функцию входа в систему:

    this.props.login(this.state.email, this.state.password).catch(err => { this.setState({ error: err }); }); function mapStateToProps(state, ownProps) { return { user: state.user }; } .................. export default connect(mapStateToProps, { login})(yourlogincomponent)

Надеюсь, это поможет!

0 голосов
/ 10 января 2019

Просто импортируйте firebase из файла конфигурации (где вы инициализировали). Это getFirebase() кажется ненужным.

import firebase from 'firebase-config';

firebase.auth()...
...