How to define initialState
from API?
Actions
import * as types from '../constants/ActionTypes'
import jquery from 'jquery'
import { apiRoot } from '../config.js'
import Immutable from 'immutable'
import Random from 'random-js'
export function fetchLentItemList() {
return function(dispatch) {
dispatch(fetchLentItems());
jquery.get(`${apiRoot}/api/v1/something/`)
.done((data) => {
dispatch(fetchLentItems("success", Immutable.fromJS(data)))
})
.fail(() => {
dispatch(fetchLentItems("error"))
})
}
}
export function fetchLentItems(status, locations = Immutable.List()) {
return { type: types.FETCH_LENT_ITEMS, status, locations }
}
Reducers
import * as types from '../constants/ActionTypes'
import { combineReducers } from 'redux'
import Immutable from 'immutable'
const initialState = {
initialLentItems: [],
lentItems: []
}
function initialLentItems(state = initialState.initialLentItems, action) {
// return state
switch (action.type) {
case types.FETCH_LENT_ITEMS:
switch (action.status) {
case 'success':
return {
initialLentItems: action.locations,
lentItems: []
}
case 'error':
return {
initialLentItems: Immutable.List(),
lentItems: []
}
default:
return Object.assign({}, state, { isLoading: true })
}
default:
return state
}
}
const rootReducer = combineReducers({
initialLentItems
})
export default rootReducer;
In reducers
if I defined my initialState
like this, it works:
initialLentItems: Immutable.fromJS([
{
"lent_item_id": 5648,
"vendor": "Vendor A",
"product": "Product A",
"variant": "Variant A",
},
{
"lent_item_id": 5648,
"vendor": "Vendor B",
"product": "Product B",
"variant": "Variant B",
}
]),
Thanks in advance.
In the componentWillMount
of your Redux root element (the one that is wrapped by Provider
and receives the store) you can dispatch the fetchLentItems
function to set up your initial state.