Магазин Redux пустеет в компоненте
У меня проблема с получением избыточного хранилища в моем компоненте. Я использую асинхронный редукт-реагировать для получения данных из API. Я получил данные от jsonplaceholder api, однако у меня возникли проблемы с настройкой хранилища и подключением хранилища с корневым компонентом, я могу видеть, что в хранилище есть данные, используя расширение logger и инструменты инструментов разработки redux. Я сделал console.log(store.getState()) в компоненте index, и хранилище пустое, clinetData:{}. Я понятия не имею, что я пропустил, мне нужен совет. // создатель действия
export const datafeachsuccess = data => {
return {
type: FEACH_SUCCESS,
data: data
};
}
export const getClientData = () => {
return (dispatch) => {
return fetch('https://jsonplaceholder.typicode.com/posts')
.then(res => {
return res.json();
}).then(json => {
dispatch(datafeachsuccess(json))
})
}}
// клиентский редуктор данных
const clientReducer =(state = {}, action)=>{
switch (action.type) {
case FEACH_DATA:
return {
...state,
requestData: 'requesting Data'
};
case FEACH_SUCCESS:
return {
...state,
client: action.data
};
case FEACH_FAILD:
return {
...state,
error: action.data
}
default:
return state;
}
}
export default clientReducer;
// rootreducer
import { combineReducers } from 'redux';
import clientReducer from './clientreducer/clientreducer'
const rootReducer = combineReducers({
clienetData: clientReducer
})
export default rootReducer;
// настройка магазина
import { createStore, applyMiddleware } from 'redux';
import rootReducer from './../reducer/rootReducer'
import thunkMiddelware from 'redux-thunk';
import { composeWithDevTools } from 'redux-devtools-extension';
import { createLogger } from 'redux-logger'
const loggerMiddleware = createLogger()
export default function configureStore() {
return createStore(
rootReducer,
composeWithDevTools(
applyMiddleware(thunkMiddelware, loggerMiddleware)
)
);
}
// индексный компонент
import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
import registerServiceWorker from './registerServiceWorker';
import createHistory from 'history/createBrowserHistory'
import { Provider } from 'react-redux';
import {Router} from 'react-router-dom';
import configureStore from './redux/store/configureStore'
const history = createHistory();
const store = configureStore();
console.log(store.getState())
const app =(
<Provider store={store}>
<Router history={history}>
<App/>
</Router>
</Provider>
)
ReactDOM.render(app, document.getElementById('root'));
registerServiceWorker();
// соединение с компонентом
import React, { Component } from 'react';
import Grid from '@material-ui/core/Grid';
import {Link} from 'react-router-dom'
import { connect } from 'react-redux';
import { withRouter } from 'react-router'
import {getClientData} from './../../redux/actions/feachclientData/requestData'
import './css/user.css'
class UserInfo extends Component {
constructor(props){
super(props)
this.state = {
}
}
componentDidMount(){
this.props.getClientData();
}
render() {
if(this.props.userData === 0) return null;
return (
<Grid container space={8} justify='center'>
</Grid>
);
}
}
const mapStateToProps = state => {
return {
userData: state.clientData|| []
};
};
const mapDispatchToProps = dispatch => {
return {
getClientData: () => dispatch(getClientData())
};
};
export default withRouter(connect(mapStateToProps, mapDispatchToProps)(UserInfo))
2 ответа
Ты звонишь
console.log(store.getState())
До тебя fetch
данные с сервера.
Попробуй позвонить getClientData
сначала, затем в журнале обратного вызова store.getState()
Когда вы звоните console.log(store.getState())
Вы еще не позвонили в API, поэтому нет сообщений. Кажется, вы вызываете API только после монтирования компонента UserInfo (т.е. добавление в DOM страницы)