#javascript #reactjs #redux #react-redux #react-hooks
Вопрос:
Поскольку я новичок в redux, может ли кто-нибудь помочь мне, если есть возможность внести изменения в одно действие на основе изменения состояния из другого файла.
actions.js
export function setChangeNotification(changeNotification: boolean) {
return {
type: SET_CHANGE_NOTIFICATION,
changeNotification
};
}
Toolbar.js
endMeetingForAll () {
const { _changeNotification } = this.props;
this.props.dispatch(setChangeNotification(true)); //changed value set to true but at default it's false in my initial state.
console.log(_changeNotification,'changeNotification from end meeting'); //Checked if value changed using mapStateToProps.
}
function _mapStateToProps(state) {
return {
_changeNotification: Boolean(state['features/toolbox'].changeNotification)
};
}
export default translate(connect(_mapStateToProps)(Toolbox));
Еще один action.js где мне нужно что-то изменить
export function notifyKickedOut(participant: Object, _: ?Function) { // eslint-disable-line
no-unused-vars
return (dispatch: Dispatch<any>, getState: Function) => {
const args = {
participantDisplayName:
getParticipantDisplayName(getState, participant.getId())
};
dispatch(showNotification({
appearance: NOTIFICATION_TYPE.ERROR,
hideErrorSupportLink: true,
descriptionKey: 'dialog.kickMessage',
descriptionArguments: args,
titleKey: 'dialog.kickTitle',
titleArguments: args
}));
//JAAM CODE
// when the paticipant removed after redirect to the website.
setTimeout(
() => {
window.APP.conference.hangup(false);
executeCommand('hangup');
window.close();
},
NOTIFICATION_TIMEOUT);
};
}
В приведенном выше action.js Мне нужно отправить еще одно подтверждение shownotification, если значение setChangeNotification верно, например
if(changeNotification){
dispatch(showNotification({
appearance: NOTIFICATION_TYPE.ERROR,
descriptionKey: 'dialog.changed',
titleKey: 'dialog.changed'
}));
}else{
dispatch(showNotification({
appearance: NOTIFICATION_TYPE.ERROR,
hideErrorSupportLink: true,
descriptionKey: 'dialog.kickMessage',
descriptionArguments: args,
titleKey: 'dialog.kickTitle',
titleArguments: args
}));
}
Ответ №1:
У вас есть доступ к штату по телефону getState()
. Поскольку это похоже на thunk (создатель асинхронного действия), вы можете отправить туда любое действие, которое вам нужно.
Комментарии:
1. У меня тут небольшая проблема. Мое состояние не обновляется даже после отправки. Он остается ложным всегда, как в исходном состоянии.
2. @shanks_9790 Нам нужно было бы увидеть ваш редуктор, чтобы отладить это, я думаю, трудно сказать, что происходит не так.
3. dropbox.com/s/pfl6npthzr3r1op/reducer.txt?dl=0 Можете ли вы заглянуть в этот редуктор?
4. @shanks_9790 Да, все выглядит нормально. Может быть, в вашей настройке что-то другое. Вероятно, лучше исправить простое изменение состояния, прежде чем заставлять тук работать.
5. Есть ли какой-то другой способ обновить его в магазине?