ich eine Benachrichtigung Zustand wie folgt aus (in redux) zu schaffen,Löschen eines redux Zustand auf Seite Übergang
import { STORE_NOTIF, PURGE_NOTIF } from '../actions/notif';
const defaultState = {
kind: null,
message: null
}
export default function notifReducer(state = defaultState, action) {
switch(action.type) {
case STORE_NOTIF:
return {kind: action.kind, message: action.message};
case PURGE_NOTIF:
return defaultState;
default:
return state;
}
}
das funktioniert für Ereignisse, die ich weiß, zu steuern. Aber wo sollte ich das Clearing (PURGE_NOTIF) implementieren, wenn ich auf Seiten umblättere, zB von der Anmeldung zur Startseite? Ich möchte kein componentWillMount
(und ich glaube nicht, dass das der Schreibweise ist) auf jeder Komponente schreiben, um die notifState
zu löschen. Sollte das irgendwo auf den Routen sein? Ich benutze React-Router BTW.
UPDATE mit Antwort
Mein neues Minderer wie folgt aussieht, wo ich ein displayed
boolean
import _ from 'lodash';
import { STORE_NOTIF, PURGE_NOTIF, DISPLAY_NOTIF } from '../actions/notif';
const defaultState = {
kind: null,
message: null,
displayed: true
}
export default function notifReducer(state = defaultState, action) {
switch(action.type) {
case STORE_NOTIF:
return _.merge({}, state, { kind: action.kind, message: action.message, displayed: action.displayImmediately });
case DISPLAY_NOTIF:
return _.merge({}, state, { displayed: true });
case PURGE_NOTIF:
return defaultState;
default:
return state;
}
}
und in meinem Klienten ist, wo ich überprüfen, ob es bereits oder nicht und Griff in geeigneter Weise angezeigt ist schon .
const scrollTop =() => { window.scrollTo(0, 0) }
const handleNotifs = (store) => {
const notifState = store.getState().notifState;
if (notifState.message) {
if (notifState.displayed) {
store.dispatch({type: PURGE_NOTIF});
} else {
store.dispatch({type: DISPLAY_NOTIF});
}
}
}
const store = applyMiddleware(...middlewares)(createStore)(reducer, initialState);
ReactDOM.render(
<Provider store={store}>
<Router onUpdate={() => {scrollTop(); handleNotifs(store)}} routes={routes} history={browserHistory} />
</Provider>,
document.getElementById('app')
);
Ja, ich habe es so. Aber es heißt 'Uncaught ReferenceError: store ist nicht definiert '. Selbst wenn ich '' habe. Wie greife ich auf den Laden zu? –
index
Sie müssen den Verweis auf Ihre aktuelle Datei übergeben – Florent
Muss ich Shop exportieren? Von meinem Client habe ich 'const store = applyMiddleware (... Middlewares) (createStore) (Reducer, initialState);' und 'ReactDOM.render ( window .scrollTo (0, 0);} Routen = {Routen} history = {browserHistory} /> , document.getElementById ('App')); ' –
index