Zuerst möchte ich erwähnen, dass das einzige, was ich zwischen zwei Ansätze ändern, ist SetState vs durch den Redux-Shop. Nichts anderes ändern, d. H. Komponenten usw.setState funktioniert aber redux store update nicht
Wenn ich den setState-Ansatz verwende, kann ich mein Modal schließen, aber wenn ich durch den Store gehe, wird es nicht geschlossen. Irgendeine Idee warum?
Hier ist mein Minderer:
import 'babel-polyfill';
import * as types from '../actions/actionTypes';
const initialState = {
modals: {
"modal1": { isDisplayed: true },
"modal2": { isDisplayed: false }
}
};
export default (state = initialState, action) => {
switch (action.type) {
case types.SET_IS_DISPLAYED_MODAL :
return Object.assign({}, state, {
modals: action.modals
})
default: return state
}
}
}
Hier sind die beiden Versionen meiner onClick Aktion sind, die die modalen schließen soll.
Dies ist die setState Version und es funktioniert:
displayModal(modalId, value)
{
let modals = this.props.modals;
modals[modalId].isDisplayed = value;
return setState({modals: modals});
}
Und hier ist die Version, die durch die redux Laden geht und es meine modalen schließt nicht.
displayModal(modalId, value)
{
let modals = this.props.modals;
modals[modalId].isDisplayed = value;
return this.props.actions.displayModal(modals);
}
gibt es nicht viel zu der Aktion, aber hier ist es:
export const displayModal = (modals) => {
return {
type: types.SET_IS_DISPLAYED_MODAL,
modals
};
}
Nur damit Sie sehen, wie es in meiner Komponente sieht, hier ist es:
render() {
return(
<div>
<div>Some info...</div>
{this.props.modals["modal1"].isDisplayed
? <Modal1 />
: null}
{this.props.modals["modal2"].isDisplayed
? <Modal2 />
: null}
</div>
);
}
BTW, ich Ich weiß, dass ich die Action und den Reducer treffe. Ich weiß auch, dass, wenn ich einen Debugger in meine mapStateToProps lege, ich es mit aktualisiertem Zustand für meine Modale treffe. Also weiß ich, dass sowohl die Aktion als auch der Reducer tun, was sie tun sollen.
UPDATE: Ich habe gerade etwas versucht und das Problem behoben. Ich habe letzte Zeile zu mapStateToProps und den Abschnitt in meiner Komponente aktualisiert:
function mapStateToProps(state) {
return {
modals: state.modals,
isModal1Displayed: state.modals["modal1"].isDisplayed // Just added this line
}
}
Und änderte den Code in meiner Komponente:
render() {
return(
<div>
<div>Some info...</div>
{this.props.isModal1Displayed
? <Modal1 />
: null}
</div>
);
}
könnten Sie den Teil Ihres Codes hinzufügen, wo Sie die Komponente verbinden – diedu
Just updated the original post. Anstatt dies zu überprüfen.props.modals ["modal1"]. IsDisplayed, habe ich eine neue Requisite dafür in mapStateToProps erstellt. Ich denke, es sieht in MapStateToProps etwas funky aus, aber es funktioniert gut. Irgendeine Idee, warum der ursprüngliche Code fehlschlug? – Sam