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



让我卡了好几天的问题是,虽然我的 redux devtool 显示成功的状态更新没有任何突变和成功的 View 组件重新渲染,但是当我调用 getState(( 时,它总是返回初始状态并且不关心更新的状态! 任何知道什么会使这种情况的人请帮助我。

我使用 react-redux 和 redux-thunk

操作.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() )
  };
}

减速器.js

export default function peopleReducer(state = initialState, action) {
  switch (action.type) {
    case 'TEST':
      return {
        ...state,
        test: action.data
      }
    default:
      return state;
  }
}

页码01.js

componentDidUpdate(){
   console.log('get state = ', store.getState())
}
....
<TouchableHighlight 
   underlayColor={"#0e911b"}
   onPress={() => {
   this.props.testing('test contenttttt !!!!')            
    }}
 >
   <Text style={styles.title}>ACTION</Text>
</TouchableHighlight>

function mapStateToProps(state) {
  return {
    people: state.people,
    planets: state.planets,
    test: state.test
  };
}
function mapDispatchToProps(dispatch) {
  return { 
    getPeople: () => dispatch(getPeopleFromAPI()), 
    getPlanets: () => dispatch(getPlanetsFromAPI()), 
    testing: data => dispatch(testFunc(data)) };
}
export default connect(mapStateToProps, mapDispatchToProps)(App);

为了在操作文件中使用getState(),您需要直接从 store 使用它,而是可以在使用时将其作为内部函数的第二个参数以及调度redux-thunk

export function testFunc(data) {
  return (dispatch, getState) => {
    dispatch(test(data))
    console.log('GLOBAL STATE IS :', getState())
  };
}
此外,在

调度操作后,不会立即看到更新的状态,因为 Redux 状态更新是异步发生的。您应该在使用状态的组件的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()

您可以在此处阅读更多相关信息

但是,当您使用 connect 时,您不需要在组件中使用store.getState(),您可以使用mapStateToProps函数来获取状态值。

相关内容

  • 没有找到相关文章

最新更新