내 응용 프로그램 상태를 업데이트 한 다음 응용 프로그램 상태가 업데이트되었을 때 API 호출을 만드는 가장 좋은 방법은 무엇입니까?Redux 상태 업데이트 및 API 호출에 대한 조언
응용 프로그램 수준 개체에서 전달하는 API 호출을 만드는 응용 프로그램이 있습니다.
다음은 두 가지 동작을 호출하는 컨테이너 메서드입니다. 첫 번째는 검색 기준을 업데이트하여 API 호출에 사용합니다. 문제는 fetchActivityData 호출을 만들 때 응용 프로그램 상태가 업데이트되지 않는다는 것입니다.
export default function(state = initialCriteria, action) {
switch(action.type) {
case SET_ACTIVITY_ID: {
return {...state, activityId: action.payload};
}
case SET_SORT: {
return {...state, sort: action.payload};
}
case SET_SORT_ORDER: {
return {...state, sortOrder: action.payload};
}
case SET_SEARCH_TERMS: {
return {...state, searchTerms: action.payload};
}
case INCREMENT_PAGE: {
return {...state, page: state.page+1 };
}
case SET_PAGESIZE: {
return {...state, pagesize: action.payload};
}
default:
return state;
}
}
그럼 내가 만드는 작업 작성자가 : 그럼
//container.js
clickHandler(){
this.props.setActivityId(this.props.activity.id);
this.props.fetchActivityData(this.props.searchCriteria);
}
.......
function mapDispatchToProps(dispatch){
return bindActionCreators({ setActivityId, fetchActivityData },
dispatch);
}
function mapStateToProps(state) {
return {
searchCriteria: state.searchCriteria
};
}
내 API 호출 기준을 업데이트 한 무리의 액션 제작자가
다음//criteria_actions.js
export function setActivityId(activityId){
return {
type: SET_ACTIVITY_ID,
payload: activityId
}
}
export function setSort(sort){
return {
type: SET_SORT,
payload: sort
}
}
export function setSortOrder(sortOrder){
return {
type: SET_SORT_ORDER,
payload: sortOrder
}
}
는 기준 액션 감속기입니다 API 호출
//api_action
export function fetchActivityData(searchCriteria) {
const { activityId, sort, sortOrder, searchTerms, page, pagesize } = searchCriteria;
var otherFilters = "";
if(activityId === 7){
otherFilters = '"media": "all"';
}
const request = axios({
method: 'get',
url: `${API_ROOT}/activities/campaigns/${PROJECT_ID}/sort/${sort}/sortorder/${sortOrder}/page/${page}/pagesize/${pagesize}/?filter={"at":[${activityId}],"search":"${searchTerms}",${otherFilters}}`,
headers: {
"USER_TOKEN": USER_TOKEN,
}
});
return {
type: FETCH_ACTIVITY_DATA,
payload: request
}
}
여기 내 API 감속 기입니다.
export default function(state = [], action) {
switch(action.type) {
case FETCH_ACTIVITY_DATA:
return action.payload.data.data.items;
default:
return state;
}
}
본질적으로 필터링 된 컬렉션을 반환하는 API 호출을 만들고 있습니다. 필터 매개 변수는 다양한 계층 구조이므로 다른 컨테이너로 구분됩니다. 각 필터 컨테이너는 actionCreator를 호출하여 축소되어 searchCriteria {}에 저장됩니다. 그런 다음이 객체는 fetchData 액션으로 전달됩니다. 솔루션에서 searchCriteria에 액세스하려면 액션 작성자 내에서 애플리케이션 레벨 상태에 액세스해야합니다. 어떻게하면 좋을까요? – user2731105
그건 내가 당신의 프로젝트에 대한 정보를 가지고 있지 않기 때문에'// 몇몇 파생 된 값 '으로 주석 처리해야했던 정확한 부분입니다; 이 주석은 새로운'searchCriteria'를 정확하게 계산하고 리턴하는 함수로 대체되어야합니다. getState()에서 현재 값을 얻을 수 있습니다.searchCriteria'를 계산할 필요가있는 activityId가 이미 있습니다. – gravityplanx
굉장! 감사! – user2731105