APIからinitialState
を定義する方法は?
アクション
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 }
}
削減者
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;
reducers
で、initialState
を次のように定義すると、次のように機能します。
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",
}
]),
前もって感謝します。
Reduxルート要素(componentWillMount
でラップされ、ストアを受け取る要素)のProvider
で、fetchLentItems
関数をディスパッチして初期状態を設定できます。