Reputation: 5245
I'm trying to retrieve data from Api and save it in Redux store then print it on screen.
I'm using functional components.
Then when data cames back embedToken
stay undefined
, I think it should get updated when store 'refreshes'
App.js
import React, { useEffect, useState } from 'react';
import logo from './logo.svg';
import './App.css';
import { connect } from 'react-redux'
import { requestEmbedToken } from './redux/actions'
function App(props) {
const [embedToken, setEmbedToken] = useState(props.token);
useEffect(() => {
if (props.token === undefined) {
props.requestToken();
console.log(props.token)
setEmbedToken(props.token)
}
}, [props]);
return (
<div className="App">
<header className="App-header">
<img src={logo} className="App-logo" alt="logo" />
Here's the token {JSON.stringify(embedToken)}
</header>
</div>
);
}
const mapStateToProps = (state) => ({
token: state.embedToken,
})
const mapDispatchToProps = (dispatch) => {
return ({
requestToken: () => dispatch(requestEmbedToken())
})
}
export default connect(mapStateToProps, mapDispatchToProps)(App)
Actions
import axios from 'axios';
export const saveEmbedToken = token => ({
type: 'SAVE_EMBED_TOKEN',
payload: {
token
}
})
export const requestEmbedToken = () => (dispatch) => {
return axios.get('http://localhost:7071/api/getpbiTokens')
.then(response => {
console.log("token embed", response)
dispatch(saveEmbedToken(response.data.token))
})
}
Reducers
import { combineReducers } from 'redux'
function reportingActions(state = {}, action) {
switch (action.type) {
case 'SAVE_EMBED_TOKEN':
return {
...state,
embedToken: action.payload.token
}
default: // need this for default case
return state
}
}
const reportingReducers = combineReducers({
reportingActions
})
export default reportingReducers
Upvotes: 0
Views: 235
Reputation: 984
The actual path to the token is state.reportingActions.embedToken
not state.embedToken
Fix this
const mapStateToProps = (state) => ({
token: state.embedToken,
})
Upvotes: 1