Не могу получить доступ к хранилищу с mapStateToProps - PullRequest
0 голосов
/ 25 апреля 2019

Я новичок, чтобы отреагировать, я пытаюсь настроить систему входа в систему с помощью redux. В моем компоненте Login я использую mapStateToProps с методом connect, который предлагает react-redux.

Когда я пытался получить то, что мне нужно из магазина, он продолжал говорить, что это не определено. Это фрагмент моего компонента Login:

function mapStateToProps(state) {
  return {
    loggingIn: state.authentication.loggedIn,


  };
}

function mapDispatchToProps(dispatch) {
  return {
     actions: bindActionCreators(userActions, dispatch),
     alertActions: bindActionCreators(alertActions, dispatch),

  };
}
export default connect(mapStateToProps, mapDispatchToProps)(Login)

Вот как я пытался комбинировать редукторы:

import { combineReducers } from 'redux';
import authentication from './userReducer';
import alert from './alertReducer'

    const rootReducer = () => combineReducers({
        authentication,
        alert
    });

    export default rootReducer;

Однако я не смог получить доступ к реквизитам logginIn в компоненте Login. После нескольких часов неудачных попыток я начал работать, убрав функцию стрелки:

const rootReducer = combineReducers({

Может кто-нибудь сказать мне, почему функция стрелки не работает? Спасибо

Обновление: вот как я импортировал корневой редуктор в файл index.js

import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
import * as serviceWorker from './serviceWorker';
import { Provider } from 'react-redux'
import { createStore, applyMiddleware } from 'redux'
import thunk from 'redux-thunk';
import rootReducer from './reducers'

const store = createStore(rootReducer, applyMiddleware(thunk));


  ReactDOM.render(

  <Provider store={store}>

    <App />
  </Provider>, document.getElementById('root'))



// If you want your app to work offline and load faster, you can change
// unregister() to register() below. Note this comes with some pitfalls.

serviceWorker.unregister();

Ответы [ 2 ]

1 голос
/ 25 апреля 2019

docs говорит вам, чтобы вы вызвали combReducers для предоставления корневого редуктора.Метод createStore ожидает редуктор, а не функцию для вызова этого редуктора.

0 голосов
/ 18 мая 2019

В дополнение к ответу Виниция, вы можете еще больше реорганизовать свой combineReducers() звонок.

Вместо:

const rootReducer = () => combineReducers({
     authentication,
     alert
});

export default rootReducer;

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

export default combineReducers({
  authentication,
  alert
});

Вы экспортируете и вызываете combineReducers() все за один раз.Да, и чтобы импортировать его, так как мы удалили rootReducer, просто сделайте:

import reducers from "./reducers";

const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;
const store = createStore(
  reducers,
  composeEnhancers(applyMiddleware(reduxThunk))
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...