Вам придется изменить свой код, потому что вы определяете данные как функцию поддержки, которая будет отправлять ваше действие:
const mapDispatchToProps = dispatch => {
return {
data: (result) => dispatch(firebaseChatAction(result)),
}
}
После этого измените строку после консоли, войдите в свое обещание и используйте опору данных, которую вы определили в функции mapDispatch:
const MessageUiBody = ( { data, messages, loading } ) => {
const userData = JSON.parse(localStorage.getItem("user-data"));
useEffect( () => {
const firebaseChatData = () => (dispatch) => {
firebaseDB.ref().child(API.firebaseEnv + "/messages/messageItem" + userData.account_id)
.on("value", snap => {
const firebaseChat = snap.val();
// here you call the data that will dispatch the firebaseChatAction
data(firebaseChat)
});
};
}, []);
return(
<div> // code </div>
);
};
Также стоит отметить, что вам не нужно собирать элементы sh в вашем состоянии, вы не можете изменить текущее состояние , поэтому всегда старайтесь генерировать новые элементы вместо того, чтобы изменять существующий, что-то вроде этого:
export default function messages ( state = [], action = {}) {
switch (action.type) {
case 'FIREBASE_MESSAGE' :
return {
...state,
data: {
...state.data,
messages: [...state.data.messages, action.firebaseChat]
}
};
default:
return state
}
}
С помощью оператора распространения вы возвращаете новый массив, который содержит исходный массив state.data.messages и будет также добавьте элемент firebaseChat.