В данный момент я все еще новичок в Redux.
В приложении есть страница с категориями, при нажатии на одну из которых открывается новое окно со списком доступных записей.Это окно имеет положение в своем состоянии, с которого вы можете начать запрашивать данные.
Проблема в том, что, когда приложение запускает окно, выполняет действие, которое очищает состояние.Но по какой-то причине переменная с позицией не меняется.
(я знаю, я могу просто переместить эту позицию в переменную компонента, но как новичок, я хочу понять проблему)
Действие для загрузки элементов:
getLatestDataInCategory: (category, currNum) => {
return (dispatch) => {
dispatch({type: actionTypes.DATA_IN_CATEGORY_LOADING_ENABLED})
fetch('http://************/api/rf_api/get_rf_list.php?category='+category+'&startFrom='+currNum)
.then(res => res.json())
.then((res) => {
dispatch({type: actionTypes.DATA_IN_CATEGORY_LOADING_DISABLED})
dispatch({type: actionTypes.DATA_IN_CATEGORY_ADD_DATA, payload: {data: res.results}})
dispatch({type: actionTypes.DATA_IN_CATEGORY_ADD_NUM})
}).catch(error => {
dispatch({type: actionTypes.DATA_IN_CATEGORY_ERROR, payload: {error: error}})
dispatch({type: actionTypes.DATA_IN_CATEGORY_LOADING_DISABLED})
console.log(error)
})
}
}
Действие для очистки данных:
clearData: () => {
return (dispatch) => {
dispatch({type: actionTypes.DATA_IN_CATEGORY_CLEAR})
}
}
Редукторы:
export const reducersDataInCategory = (state = initialStateDataInCategory, action) => {
const {type, payload} = action
switch(type) {
case actionTypes.DATA_IN_CATEGORY_LOADING_ENABLED:
return{...state,
isLoading: true}
break
case actionTypes.DATA_IN_CATEGORY_LOADING_DISABLED:
return{...state,
isLoading: false}
break
case actionTypes.DATA_IN_CATEGORY_ADD_DATA:
return{...state,
data: [...state.data, ...payload.data],
error: null}
break
case actionTypes.DATA_IN_CATEGORY_ERROR:
return{...state,
error: payload.error}
break
case actionTypes.DATA_IN_CATEGORY_ADD_NUM:
return{...state,
currNum: state.currNum + 30}
break
case actionTypes.DATA_IN_CATEGORY_CLEAR:
return{...state,
currNum: 0,
data: []}
break
default:
return state
break
}
}
в компоненте:
componentDidMount() {
this.props.clearData()
const categoryId = this.props.navigation.getParam('categoryId', 1)
this.props.getLatestFormulasInCategory(categoryId, this.props.currNum)
}