即使使用正确的数据调用了reducer,Redux状态也不会更新

时间:2020-10-23 16:06:12

标签: javascript reactjs redux react-redux

由于某种原因,即使reducer运行并且console.log显示正确的数据已传递给它,redux存储也没有更新。

相关文件:

  1. App.jsx
import {Provider} from 'react-redux';
import store from './store';
const Stack = createStackNavigator();

export default class App extends Component {
  render() {
    return (
      <Provider store={store()}>
  1. Store.js
import {createStore, applyMiddleware} from 'redux';
import rootReducer from '../reducers';
import thunk from 'redux-thunk';

const store = (initialState = {}) =>{
  return createStore(
    rootReducer,
    initialState,
    applyMiddleware(thunk)
  )
}
export default store;
  1. Register.tsx
...
<Pressable 
style={styles.button}
onPress={() => this.props.submitRegistration(this.state)}
>
...
const mapDispatchToProps = (dispatch: any) => {
  return {
    submitRegistration: (data: any) => {
      dispatch(UserActions.submitRegister(data))
    }
  }
}

export default connect(mapStateToProps, mapDispatchToProps)(Register);
  1. UserActions
import { signUp } from '../../services/backend';
import { setUser } from '../../actions';

export function submitRegister(data: any) {
  return async (dispatch: any) => {
    const response = await signUp(data);

    const responseData = await response.json();
    if(responseData.token) {
      console.log('here', responseData);
      dispatch(setUser(responseData.user));
    }
  }; 
}
  1. 动作创建者
export const setUser = (user: any) => ({
  type: 'SET_USER',
  user
}); 
  1. User Reducer
import { SET_USER } from "../actions/actionTypes"

const initialState = {
  user: {}
}

const User = (state = initialState, action: any) => {
  switch(action.type) {
    case SET_USER: 
      console.log('here action', action.user);
      return { user: action.user}
    default:
      return state
  }
}
export default User;

非常感谢您提供的任何帮助。似乎我以某种方式配置不当,因为即使我设置了初始状态:

const initialState = {
  user: {firstName: "John"}
}

它没有反映在redux存储中。

1 个答案:

答案 0 :(得分:0)

在您的动作创建者中:

export const setUser =(用户:任何)=>( 返回{ 类型:“ SET_USER”, 用户 });