我正在使用redux,我不确定为什么我在try 访问时会获得初始状态,但它在redux dev工具中显示已更新的状态.
我正在做的事情: 我有两个按钮"Yes","No",在Reducer中,我有初始状态,所以当我点击"yes"按钮时,我使用调度方法更新初始状态,我可以在redux dev工具中看到更新的状态,但当我在"No"按钮的单击功能中从redux访问状态时,它显示初始状态:
reducer.js个
import { SET_MODAL_DETAILS, CLEAR_MODAL_DETAILS } from "../actions/types";
const initialState = {
modalInfo: {
isOpen: false,
modalName: "",
title: "",
content: "",
},
};
const modal = (state = initialState, action) => {
const { type, payload } = action;
switch (type) {
case SET_MODAL_DETAILS:
return { ...state, modalInfo: payload };
case CLEAR_MODAL_DETAILS:
return { ...state, modalInfo: null };
default:
return state;
}
};
export default modal;
action.js个
import {SET_MODAL_DETAILS, CLEAR_MODAL_DETAILS} from "./types";
export const setModalDetails = (payload) => ({
type: SET_MODAL_DETAILS,
payload: payload,
});
export const clearModalDetails = () => ({
type: CLEAR_MODAL_DETAILS,
});
store.js个
import { createStore, applyMiddleware } from "redux";
import { composeWithDevTools } from "redux-devtools-extension";
import thunk from "redux-thunk";
import rootReducer from "./reducers";
import checkTokenExpiration from "./checkToken";
const middleware = [thunk];
const store = createStore(
rootReducer,
process.env.NODE_ENV === "production"
? applyMiddleware(...middleware, checkTokenExpiration)
: composeWithDevTools(applyMiddleware(...middleware, checkTokenExpiration))
);
export default store;
student.js个
import { connect } from "react-redux";
import Button from "@mui/material/Button";
import { setModalDetails } from "../../redux/actions/modal";
const Student = ({ setModalDetails, modal: { modalInfo } }) => {
const handleYesButton = () => {
setModalDetails({
...modalInfo,
isOpen: true,
title: "Confirm Modal",
content: "Do you want to change status?",
modalName: "confirmModal",
});
};
const handleNoButton = () => {
console.log(modalInfo); // returns initial state while I have updated via above funtion
};
return (
<>
<Button onClick={handleYesButton}>Yes</Button>
<Button onClick={handleNoButton}>No</Button>
</>
);
};
const mapStateToProps = (state) => ({
modal: state.modal,
});
export default connect(mapStateToProps, { setModalDetails })(Student);