Javascript Redux存储为不同的组件返回不同的状态(React)
我是redux的新手,一直在尝试调试这个问题。基本上,我有两个不相关的组件(不是父-子、子-父或兄弟),我想利用Redux进行全局状态管理,将数据从一个组件传递到另一个组件 代码的工作原理是组件a能够将数据发送到存储。在组件A上记录store.getState(),我可以看到新的更新状态。但是,在组件B上记录store.getState()时,我无法看到相同的更新状态。(项目将为空) 使用ReduxDevTools扩展,我可以看到在调用Javascript Redux存储为不同的组件返回不同的状态(React),javascript,reactjs,redux,react-redux,Javascript,Reactjs,Redux,React Redux,我是redux的新手,一直在尝试调试这个问题。基本上,我有两个不相关的组件(不是父-子、子-父或兄弟),我想利用Redux进行全局状态管理,将数据从一个组件传递到另一个组件 代码的工作原理是组件a能够将数据发送到存储。在组件A上记录store.getState(),我可以看到新的更新状态。但是,在组件B上记录store.getState()时,我无法看到相同的更新状态。(项目将为空) 使用ReduxDevTools扩展,我可以看到在调用onPress方法后组件A中的状态会更新,但对于B则不会 组
onPress
方法后组件A中的状态会更新,但对于B则不会
组件A状态已更新:
B部分状态不变:
组件A
class a extends Component {
// implementation code
onPress = r => {
this.props.sendProblem(r)
// console.log(store.getState())
}
// implementation code
}
A.propTypes = {
sendProblem: PropTypes.func.isRequired
};
export default connect(null, {sendProblem})(A)
组件B
// implementation code
componentDidMount() {
// console.log(store.getState())
}
// implementation code
B.propTypes = {
item: PropTypes.object
}
const mapStateToProps = state => ({
item: state.items.item
});
export default connect(mapStateToProps)(B);
**问题减速机**
import { ABC } from '../actions/types';
const initialState = {
item: {}
}
export default function(state= initialState, action) {
switch (action.type) {
case ABC:
return {
...state,
item: action.payload
}
default:
return state;
}
}
// implementation code
export default combineReducers({
auth: authReducer,
errors: errorReducer,
items: problemReducer
});
// root reducer used in store.js to create store
**问题行动**
import {
ABC
} from "./types";
export const sendProblem = r => dispatch => {
dispatch({
type: ABC,
payload: r
})
};
**根部减压器**
import { ABC } from '../actions/types';
const initialState = {
item: {}
}
export default function(state= initialState, action) {
switch (action.type) {
case ABC:
return {
...state,
item: action.payload
}
default:
return state;
}
}
// implementation code
export default combineReducers({
auth: authReducer,
errors: errorReducer,
items: problemReducer
});
// root reducer used in store.js to create store
任何帮助都将不胜感激!感谢您在组件上运行store.getState()
您不应该在组件中这样做,我看不到任何代码。您可以在组件A中找到问题,但问题来自何处?没有人知道,因为它不作为操作存在。export const ABC=r=>dispatch=>{
如何不会导致错误,因为您已经在此处定义了它:import{ABC}从“./types”
?我认为您发布的代码与为您产生错误的代码无关。感谢您的回复,HMR。抱歉,代码是export const sendProblem=r=>dispatch=>{
,在那里有一个输入错误@HMR。只是澄清一下,我没有从代码的编译中得到任何错误,问题是状态只在组件a而不是组件B中正确更新和记录。onPress=r=>{
r应该是什么?您可以替换export const sendProblem=r=>dispatch=>{
withexport const sendProblem=r=>({type:ABC,payload:r})
它将被调度,因为您在设置的减速机中使用了CONNECTIONstate.item
并且在MapStateTrops中获得了state.items.item
。您在任何地方都没有设置state.items
以便在MapStateTrops运行时都无法获得未定义的属性项。嘿@HMR,我不太确定是否有错误这就是问题所在,因为我在组合减速器中引入了state.items
(如上所示编辑),感谢运行store.getState()关于组件
您不应该在组件中执行此操作,我看不到任何代码。您在组件A中分派sendProblem,但由于它不作为操作存在,所以没有人知道它来自何处。export const ABC=r=>dispatch=>{
如何不会导致错误,因为您已经在此处定义了它:import{ABC}从“./types”
?我认为您发布的代码与为您产生错误的代码无关。感谢您的回复,HMR。抱歉,代码是export const sendProblem=r=>dispatch=>{
,在那里有一个输入错误@HMR。只是澄清一下,我没有从代码的编译中得到任何错误,问题是状态只在组件a而不是组件B中正确更新和记录。onPress=r=>{
r应该是什么?您可以替换export const sendProblem=r=>dispatch=>{
withexport const sendProblem=r=>({type:ABC,payload:r})
它将被调度,因为您在设置的减速机中使用了CONNECTIONstate.item
并且在MapStateTrops中获得了state.items.item
。您在任何地方都没有设置state.items
以便在MapStateTrops运行时都无法获得未定义的属性项。嘿@HMR,我不太确定是否有错误这就是问题所在,因为我已经将状态带入了组合减速器中的项目(如上所示编辑),谢谢