Я не могу использовать значение состояния по умолчанию в Redux - PullRequest
1 голос
/ 12 февраля 2020

Я не могу использовать значение состояния по умолчанию в приставке

Здравствуйте, у меня есть функция для отправки действия входа в систему, я хочу, чтобы в качестве начального значения было false,

, но когда я положить это значение в методе рендеринга, это дает мне ошибку

can't read property 'isLogin' of undefined

хотя в редуктор я добавляю initialState

let initialState = {
  isLogin: false,
};

const userReducer = (state = initialState, action) => {
  switch (action.type) {
    case IS_LOGIN:
      state = {
        ...state,
        isLogin: true,
      };
      break;
    default:
      return state;
  }
  return state;
};

вот магазин

const store = createStore(
  combineReducers({
    user: userReducer,
    count: countPlayReducer,
  }),
);

Действие

export const isLoginFunc = isLogin => {
  return {
    type: IS_LOGIN,
    payload: isLogin,
  };
};

Интерфейс пользователя / Диспетчеризация

import {isLoginFunc} from '../../redux/actions/isLoginAction';

 signIn = async data => {
   this.setState({loading: true}); // maybe here the wrong?
   API.post('/login', data)
    .then(async response => {
     let {
       data: {
         data: {
           response: {token},
         },
      },
    } = response;
    this.props.dispatch(isLoginFunc(true));
    await saveToken('id_token', token);
    this.setState({loading: false}, () =>
      this.props.navigation.navigate({
        key: 'TabHome',
        routeName: 'TabHome',
      }),
    );
  })
  .catch(error => {
    console.log(error);
    this.setState({loading: false, error: error.response.data});
  });

};

render(){
    ...
      <Text>{this.props.user.isLogin}</Text>
    ...
}

mapStateToProps = state => {
  return {
    isLogin: state.user,
  };
};

export default connect(mapStateToProps)(Login);

1 Ответ

4 голосов
/ 12 февраля 2020

Похоже, что вы отображаете избыточное состояние, используя следующее:

mapStateToProps = state => {
  return {
    isLogin: state.user,
  };
};

Но затем вы пытаетесь получить доступ к isLogin через:

this.props.user.isLogin

Похоже, это должно быть изменено на:

this.props.isLogin.isLogin

Однако вы можете вместо этого изменить свое отображение на следующее:

mapStateToProps = state => {
  return {
    isLogin: state.user.isLogin,
  };
};

Так что вы можете просто использовать:

this.props.isLogin

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...