react objetos nativos y globalmente accesibles

Estoy teniendo un momento realmente terrible con reaccionar nativo y poder acceder a funciones, variables y objetos desde niveles más profundos de funciones. Sinceramente, pensé que Redux sería mi gracia salvadora aquí, pero también me encuentro con el mismo obstáculo. Un ejemplo

export class Home extends React.Component {

static propTypes = {
    navigation: PropTypes.object,
    dispatch: Proptypes.func,
};

componentDidMount() {
    Firebase.init();
    firebase.auth().onAuthStateChanged((user) => {
        if (user) {
            this.setState({ loading: false, user });
            firebaseUserID = this.state.user.uid;
            this.props.dispatch(setUserID(firebaseUserID));
            firebaseRef = firebase.database().ref().child("Profiles").child(this.props.userID);
            firebaseRef.once("value").then(function(snapshot) {
                firebaseUserName = snapshot.child("Name").val();
                this.props.dispatch(setUserName(firebaseUserName));
                console.log('Logged in user: ' + this.props.userName);
            });
            this.props.navigation.navigate('Map');
        } else {
            this.props.navigation.navigate('Login');
        }
    });
}

En este ejemplo, la primera llamada a mis cosas de Redux está perfectamente bien:

this.props.dispatch(setUserID(firebaseUserID));

Esto toma el nombre de usuario correcto y lo guarda en mi tienda Redux. No hay problema

El error es con esta línea:

this.props.dispatch(setUserName(firebaseUserName));

Porque se llama un nivel más profundo que la declaración anterior, por lo tanto, el contexto de "esto" es diferente. Es parte de la subfunción a continuación, por lo que this.props no existe aquí, aunque literalmente cuatro líneas arriba están bien:

firebaseRef.once("value").then(function(snapshot) {

Tan pronto como tenga que hacer subfunciones (que es TODO EL TIEMPO porque así es como funciona el código), pierdo la capacidad de acceder a todos los recursos necesarios para que la aplicación funcione. He estado abriéndome camino con soluciones poco fiables y recreación superflua de variables, pero ya es suficiente, necesito que funcione correctamente como un lenguaje normal. Entonces, ¿qué estoy haciendo mal? ¿Cómo se supone que debo crear objetos, funciones y variables para poder usarlos?

Tal vez si alguien pudiera ayudarme a resolver el ejemplo específico anterior, tal vez eso me abrirá los ojos sobre cómo se supone que debo seguir adelante.

Gracias a todos, estoy seguro de que para algunos de ustedes es obvio, pero para mí este es un muro que no puedo pasar.

Respuestas a la pregunta(1)

Su respuesta a la pregunta