2017-11-01 2 views
0

스택 오버플로에서 관련된 모든 질문을 시도했지만 여전히이 문제에 대한 해결책을 찾지 못했습니다.Redux가 구성 요소의 소품을 업데이트하지 않습니다.

나는 me라는 감속기을 가지고 있고 나는 folders라고 내가 구성 요소가 업데이트되지 않는 me 감속기를 업데이트 할 때마다, 객체의 배열을 업데이트하기 위해 노력하고있어. 여기

내가 내 구성 요소에 감속기를 통해 업데이트하는 방법은 다음과 같습니다

class ComponentA extends Component { 
    ... 
    updateUploadedFiles(file) { 
    console.log(this.props.store); 
    const newFolders = this.props.me.folders.map(
     folder => 
     folder._id === file.parent._id 
      ? { 
       ...folder, 
       files: [...folder.files, file.file] 
      } 
      : folder 
    ); 

    this.props.updateMe({ 
     ...this.props.me, 
     folders: newFolders 
    }); 
    } 
    ... 
} 

function mapStateToProps(state) { 
    return { 
    me: state.me, 
    path: state.path, 
    filesToUpload: state.uploads 
    }; 
} 

function mapDispatchToProps(dispatch) { 
    return bindActionCreators(
    { 
     updatePath, 
     updateMe, 
     updateUploads 
    }, 
    dispatch 
); 
} 

export default connect(mapStateToProps, mapDispatchToProps, null, { 
    pure: false 
})(Upload); 

이 내 updateMe 행동의 코드입니다 :

export const updateMe = state => ({ 
    type: "UPDATED_ME", 
    payload: state 
}); 

그리고 이것은 me 감속기의 코드입니다 :

export default function(state = "NOT_AUTHENTICATED", action) { 
    switch (action.type) { 
    case "UPDATED_ME": 
     return action.payload; 
    default: 
     return state; 
    } 
} 

또한 여기 제가 이경 소켓을 결합하는 방법입니다 :

import me from "./me"; 
... 
import { combineReducers } from "redux"; 

const reducers = combineReducers({ 
    me, 
    ... 
}); 

export default reducers; 
+0

감속기는 작업이 트리거 될 때 응용 프로그램 상태를 업데이트하는 기능입니다. 귀하의 코드에서 나는 this.props가 사용되는 것을 보았습니다. 그래서 귀하의 코드는 감속기가 아닌 구성 요소에 있다고 생각합니다. 구성 요소에서 상태를 업데이트하려고합니까? 코드에 대한 좀 더 많은 정보를 제공해 주시면 감사하겠습니다. – DiegoTArg

+0

@DiegoTArg 예, 위 코드는 구성 요소의 코드입니다. (ComponentA'라고 부르겠습니다.)이 컴포넌트는 감속기'me'를 업데이트하고'ComponentA'의 소품을 업데이트해야합니다. –

답변

2

이것은 얼마나 효과가있는가 아닙니다. 당신의 돌아 오는의 어떤 부분을 업데이트하기 위해

가 종속 구성 요소를 가게가 변경된 것을 "알고있다"돌아 오는하자 및 업데이트하기 위해 작업을 파견 당신에게 해야을 저장합니다.

상태 개체는 불변이어야합니다.

+0

실제로 여기 아래의 작업을 디스패치하고 있습니다. 내가 그 일을 해요 :'기능 mapDispatchToProps (파견) { 반환 bindActionCreators ( { updatePath, updateMe, updateUploads }, 이 파견); }' –

+0

mapDispatchToProps 안에 bindActionCreators (디스패치 있음)를 사용하고 있습니다. –

+0

오, 죄송합니다. 너무 빠릅니다. 파견 된 행동을 볼 수 있습니까? – Jalil

관련 문제