초보자 질문에 대한 감속기 대 액션. From redux documentation :redux reducer 대 액션
작업 뭔가 일이 있다는 사실을 설명하지만, 응답 방법 응용 프로그램의 상태 변경을 지정하지 마십시오.
과 같은 인수를 감안할 때
, 감속기는 다음 상태를 계산해야하며 반환 . 놀라움이 없습니다. 부작용이 없습니다. API 호출이 없습니다. 돌연변이가 없습니다. 그냥 계산.
- 사용자가지도에 점을 배치하고 그 지점 사이의 경로를 얻을 수 있습니다 :
는 그래서 우리는 다음과 같은 시나리오를 고려합니다.
그래서
- 새로운 점은
- 새로운 경로가 마침 점으로 계산해야 목록의 마지막에 있지 배치 : 모든 3+ 점을 추가에 따라 두 가지 부작용이있다.
나는이 나의 포인트 구조를 모델링하는 경우 : 나에게
// pseudo code
export function addMapPoint(newPoint) {
return (dispatch, getState) => {
const {points} = getState();
const position = getInsertPosition(points, newPoint)
dispatch(addPoint(newPoint, position));
if (points.length >= 2) {
const previousPoint = getPreviousPoint(points, position);
calculateRoute(newPoint, previousPoint).then(route => {
dispatch(updateRoute(newPoint, route))
})
}
}
}
이 어떻게 든 모순 :
// typescript
interface Point {
coordinates;
routeTo?;
}
내가 항목의 위치 계산과 작업의 경로 검색, 예를 수행하기 위해 수정 있습니까 "하지만 응용 프로그램의 상태가 어떻게 변하는 지 지정하지 마십시오."- 작업에서 새 지점을 삽입 할 위치를 지정했기 때문입니다.
나는 감속기에서 삽입 위치를 계산할 수 있었지만, 마침 지점에 대한 경로 데이터를 어떻게 가져 옵니까?
올바른 접근 방법은 무엇입니까?
그래서 제안 된'addPointAndUpdateRoutes = (point, index)'와'addPoint (point, index)'시그니처를 살펴보면 인덱스 계산이 ui? 하지만 좌표를 수동으로 입력하는지도를 클릭하면 포인트를 추가 할 수 있습니까? 'calculateRoutes'에 대해서는 100 점이 있다면? 아니면 200? 매시간 전체 목록을 반복하면서 일부 캐시 (다른 상태 ...)를 확인하고 사용자가 항상 처음부터 시작할 수 있는지 확인하십시오. 그때 나는 그 캐시를 무효화해야합니다. – gerasalus
UI에서'index'를 계산할 수 있다고 생각합니다. 기존의 두 점 사이에 점을 추가하는 것은 UI에서 매우 명확하게 표현 될 수있는 것입니다. 'calculateRoutes'에 대해서 - 이미 계산 된 경로라면 즉시 반환 할 것입니다.이 구현은 클라이언트와 서버에 있어야합니다. 사용자의 점수가 100 또는 1000 또는 5000 점인 경우에는 별 문제가되지 않으며 실제로 계산되지 않는 한 매우 빠르게 발생합니다. 어쨌든 100 점을 지원한다면 UI 구현에 관계없이 점수를 계산해야합니다. –
잘 요점은 내가 포인트를 추가 할 수있는 2, 4 또는 5 개의 다른 장소를 가질 수 있다는 것이 었습니다. 그리고 논리는 동일하게 유지됩니다 - 첫 번째 점 - 추가, 두 번째 - 추가, 세 번째 - 마지막 점 추가 이전 등.이 논리는 각 UI 구성 요소에서 중복되지 않아야합니다. 내가 스마트 calculateRoutes 접근 방식을 사용하는 경우 이것은 감속기에서 할 수 있습니다 (하지만 맞습니까?).또는 왜 내가 별도로 경로를 저장해야합니까 - 그들은 요점없이 살 수 없습니다. 또한 마침 지점에 도달 할 수없는 부작용을 유발하는 도달 할 수없는 지점에는 경로가 없을 수 있습니다. – gerasalus