让我陷入困境的问题是,虽然我的redux devtool显示成功的状态更新没有任何类型的突变和成功的View组件重新渲染,但是当我调用getState()它总是返回初始状态并且没有'关心更新状态!任何知道可能造成这种情况的人都会帮助我。
我使用react-redux和redux-thunk
action.js
public errorDiv = {};
public errorMsg = {};
change(event: any, media) {
if (media.editText.indexOf('https://www.youtube.com/embed') != -1) {
this.errorMsg[media._id] = "";
this.errorDiv[media._id] = "";
if (!media._id) {
var data:any = {
pin_id: this.pin_id,
media_type: "video",
image_path: media.editText
}
this.ApiService
.addLinkMedia(data)
.subscribe(
media => {
})
} else if(media._id) {
var data:any = {
media_id: media._id,
image_path: media.editText
}
this.ApiService
.addLinkMedia(data)
.subscribe(
media => {
this.loadMedias()
}, error => {
})
}
} else {
this.errorMsg[media._id] = "Please enter valid URL";
this.errorDiv[media._id] = true;
}
}
reducer.js
export function test(data) {
return {
type: 'TEST',
data
};
}
export function testFunc(data) {
return dispatch => {
dispatch(test(data))
console.log('GLOBAL STATE IS :', store.getState() )
};
}
Page01.js
export default function peopleReducer(state = initialState, action) {
switch (action.type) {
case 'TEST':
return {
...state,
test: action.data
}
default:
return state;
}
}
答案 0 :(得分:0)
为了在动作文件中使用getState()
,您需要直接在商店中使用它,而不是在使用redux-thunk
时可以将它作为内部函数的第二个参数和调度一起使用
export function testFunc(data) {
return (dispatch, getState) => {
dispatch(test(data))
console.log('GLOBAL STATE IS :', getState())
};
}
由于redux-state update异步发生,因此在您调度操作后也不会立即看到更新后的状态。您应该在使用该状态的组件的componentDidUpdate
函数中进行检查。
此外,为了使用store.getState()
获取更新状态,您需要订阅状态更改,如
// Every time the state changes, log it
// Note that subscribe() returns a function for unregistering the listener
const unsubscribe = store.subscribe(() =>
console.log(store.getState())
)
您可以unsubscribe
致电
unsubscribe()
您可以阅读更多相关信息 here
但是,当您使用connect时,您不需要在组件中使用store.getState()
,您可以使用mapStateToProps
函数来获取状态值。