Я отправляю действие из некомпонентного файла JS (utils / index.js) с помощью store.dispatch (), но после изменения состояния редуктора компонент, в котором это состояние редуктора связано с использованием mapStateToProps, не является перерисовывается,
Что я делаю не так?
Любая помощь будет оценена
Заранее спасибо
Я попытался выполнить поиск, и перешел ко всем вопросам и статьям, в которых описывается действие из файла компонента.
Все связанные файлы
/ магазин / index.js
import { createStore } from "redux";
import rootReducer from "reducers";
store = createStore(rootReducer);
/ Utils / index.js
import store from './store';
import { toggleShowAlert } from "reducers/alert";
export const customAlert = msg => {
store.dispatch(toggleShowAlert(msg));
}
/ вид / Nav / index.js
import React, { Component } from 'react';
import { connect } from 'react-redux';
class Nav extends Component {
render() {
....
// component code
....
}
}
const mapStateToProps = state => {
return {
showAlert: state.alert.showAlert
}
}
export default connect(mapStateToProps)(Nav);
/ редуктор / alert.js
const TOGGLE_SHOW_ALERT = "TOGGLE_SHOW_ALERT";
export const toggleShowAlert = msg => {
return dispatch => {
dispatch({
type: TOGGLE_SHOW_ALERT,
msg
});
};
};
const initialState = {
showAlert: false,
alertMsg: ""
};
const reducer = (state = initialState, action) => {
switch (action.type) {
case TOGGLE_SHOW_ALERT:
return {
...state,
showAlert: !state.showAlert,
alertMsg: state.showAlert ? "" : action.msg
};
default:
return { ...state };
}
}
export default reducer;
другой редуктор, из которого вызывается этот customAlert
/ редукторы / user.js
import { customAlert } from 'utils';
...other codes...
export const updateAgeGender = (userId, age, gender) => {
return dispatch => {
dispatch(updateButtonLoading());
callAPI("post", `${COMM_BE_URL}/users/update-age-gender`, {
userId,
age,
gender
})
.then(res => {
if (res.status === "SUCCESS") {
dispatch(updateAgeGenderAction(age, gender));
customAlert("Your info has been updated, now u can join");
}
})
.catch(err => {
console.log(err);
dispatch(updateError(SERVER_ERROR_MSG));
});
};
};
После изменения showAlert компонент Nav должен выполнить повторную визуализацию, но этого не происходит