redux getState()不返回更新的状态

时间:2018-04-18 06:17:32

标签: javascript reactjs react-native redux getstate

让我陷入困境的问题是,虽然我的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;
  }
}

1 个答案:

答案 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函数来获取状态值。