Redux React 从 API 创建初始状态
Redux React create initial state from API
如何从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 根元素(被 Provider
包装并接收存储的元素)的 componentWillMount
中,您可以调度 fetchLentItems
函数来设置您的初始状态.
如何从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 根元素(被 Provider
包装并接收存储的元素)的 componentWillMount
中,您可以调度 fetchLentItems
函数来设置您的初始状态.