그건 당신 자신의 액션 크리에이터와 당신 자신의 리듀서의 책임이며, 당신의 액션과 레 듀서를 어떻게 개념적으로 구성하는지에 크게 관련이 있습니다. "비즈니스 로직"을 구성하는 Redux FAQ 질문은 여기에서 매우 관련이 있습니다 : http://redux.js.org/docs/FAQ.html#structure-business-logic.
썽크 액션 제작자는 getState
에 액세스 할 수있는, 그래서 썽크가 현재 상태를 확인하고 그러한 예로서, 특정 조건 하에서 파견해야하는 것은 매우 흔한 일 :
// An example of conditional dispatching based on state
const MAX_TODOS = 5;
function addTodosIfAllowed(todoText) {
return (dispatch, getState) => {
const state = getState();
if(state.todos.length < MAX_TODOS) {
dispatch({type : "ADD_TODO", text : todoText});
}
}
}
귀하의 감속기도 할 수 있습니다 전성 검사 뿐만 아니라 : 개인적으로
function todosReducer(state, action) {
switch(action.type) {
case "ADD_TODO": {
if(state.todos.length >= state.maxTodos) {
return state;
}
return {
...state,
todos : state.todos.concat(action.newTodo)
}
}
default : return state;
}
}
, 나는 그것이 아주 작은 않는 한 내 감속기 그냥 맹목적으로, 작업에 어떤 데이터의 병합이 싫어 (예를 들어, 같은, 현재 선택된 탭 또는 무언가의 이름) . 필자는 작업을 설정하기 위해 작업 작성자에게 합리적인 양의 논리를 부여하고, 작업 자체에 최소한의 데이터 만 포함하고 작업을 기반으로 작업을 수행 할 수있는 충분히 똑똑한 감속기를 선호합니다.
브라우저에서 자바 스크립트 용 스레드는 하나뿐입니다. 따라서 긴 계산이 먼저 끝나고 두 번째 계산이 시작됩니다. Btw, 브라우저가 멈춰지기 때문에 긴 계산을하지 않아야합니다. (모든것, UI 및 계산을위한 하나의 스레드 만 기억하십시오) – Pierrickouw
더 나은 표현이 부족한 것은 실제 스레드가 아닙니다. 동작은 비동기식이며 상태 키는 참조로 액세스됩니다. – firedev