Ich implementiere eine Anwendung, wo ich einige Daten von Firebase abrufe. Die Firebase-Datenbank erfordert keine Authentifizierung und ich habe bereits die Regeln für den öffentlichen Zugriff geändert.Reducer gibt Payload korrekt zurück, aber die Komponente empfängt es als undefiniert
Allerdings habe ich eine Aktion, die eine bestimmte Zeile aus der Datenbank abruft, mit der Feuerbasis Schlüssel:
Aktion
export function fetchClient(id) {
return (dispatch) => {
database.ref(`/clients/${id}`)
.on('value', snapshot => {
console.log(snapshot.val());
dispatch({
type: FETCH_CLIENT,
payload: snapshot.val()
});
});
};
}
console.log die Daten zeigt, wurde erfolgreich abgerufen.
Mein Minderer auch die Nutzlast erfolgreich zurückgegeben:
Minderer
const INITIAL_STATE = {}
export default function (state = INITIAL_STATE, action) {
switch(action.type){
case FETCH_CLIENTS:
return action.payload;
case FETCH_CLIENT:
console.log(action.payload);
return { ...state, [action.payload.id]: action.payload };
case CREATE_CLIENT:
return action.payload;
default:
return state;
}
}
Die Komponente erhält jedoch die Nutzlast als undefiniert, wenn ich von der vorherigen Seite zu verknüpfen, und ist offenbar null, wenn Ich aktualisiere die Seite.
Komponente
import React, { Component } from 'react';
import { connect } from 'react-redux';
import { fetchClient } from '../actions';
import { Link } from 'react-router-dom';
class ClientShow extends Component {
componentDidMount() {
const { id } = this.props.match.params;
console.log(this.props);
this.props.fetchClient(id);
}
render(){
const { myClient } = this.props;
if (!myClient) {
return (
<div>
<Link className="btn btn-danger" to="/" >Home</Link>
<div>Loading...</div>
</div>
);
}
return (
<div>
<Link to="/" className="btn btn-primary" >Home</Link>
<h2>{myClient.name}</h2>
<h4>The client is loaded... but undefined</h4>
</div>
);
}
}
function mapStateToProps({ clients }, ownProps) {
//console.log(ownProps.match.params.id);
return { myClient: clients[ownProps.match.params.id] };
}
export default connect(mapStateToProps, { fetchClient })(ClientShow);
Der Schlüssel in der URL ist richtig und von einem console.log in den mapStateToProps angezeigt ich die richtige param erhalten.
Console log
Clients console.log Form client_show Komponente
können Sie bitte auch noch die ClientShow Komponente – enzoborgfrantz
hallo @enzoborgfrantz, ich habe den Komponentencode hinzugefügt. – gianni
können Sie versuchen, die Protokollierung von Clients in MapStateToProps zu testen Ich glaube, dass es nicht auf dem Status ist, da Sie 'return {... state, [action.payload.id]: action.payload};' auf den Status und nicht etwas setzen wie 'return {... state, clients: []};' aber ich kann mich irren, je nachdem, was '[action.payload.id] 'enthält – enzoborgfrantz