2017-12-21 5 views
0

react-redux의 연결이 컨테이너의 ownProps를 프리젠 테이션 구성 요소로 직접 전달한다는 것을 알았지 만 공식 문서에서는이를 상기하지 않습니다. 다른 누구도 그것을 발견 했습니까? 다음과 같이react-redux의 패스 컨테이너의 ownProps와 프리젠 테이션 구성 요소를 직접 연결합니까?

const TodoApp =() => (
    <div> 
     <AddTodo name="swf" onClick={age => console.log(age)} /> 
     <VisibleTodoList /> 
     <Footer /> 
    </div> 
); 

여기 AddTodo는 컨테이너 :

let AddTodo = ({dispatch, name, onClick}) => { 
    let input; 
    console.log('name:', name); 
    return (
     <div> 
      <input ref={node => input = node}></input> 
      <button onClick={e => { 
       onClick('1000'); 
       dispatch(addTodo(input.value)); 
       input.value = ''; 
      }}> 
       Add Todo 
      </button> 
     </div> 
    ); 
}; 

AddTodo = connect()(AddTodo); 

사실도하지만 바로 번호 1000를 인쇄 할 권리 단어 'SWF', 그리고 온 클릭 콜백을 출력됩니다 CONSOLE.LOG, I 그 두 개의 소품을 수동으로 통과하지 못했습니다 ...

답변

1

예, connect에 두 번째 인수로 ownProps이 전달됩니다. 그것은 종종 같은 같습니다

function mapStateToProps(state, ownProps) { 

    return { 
     reduxProp: state.reducer, 
     ownProp: ownProps.prop 
    }; 
} 

을하지만 설명서에 참으로, at least on GitHub : 당신의 mapStateToProps 기능은 두 개의 매개 변수를 고려로 선언 된 경우

, 그것이로 저장 상태로 호출됩니다 첫 번째 매개 변수와 소품은 두 번째 매개 변수로 연결된 구성 요소에 전달되며 연결된 구성 요소가 얕은 등식 비교로 결정된 새 소품을 받으면 다시 호출됩니다. (두 번째 매개 변수는 일반적 관례 ownProps라고합니다.)

귀하의 질문에 대답하려면, 그것은 또한 매개 변수가 mapStateToProps에 전달되지 않은 경우, 두 ownPropsstate이 전달 될 것이라는 문서에 나와 있습니다.

필수 매개 변수 또는 두 개의 매개 변수가없는 함수는 ownProps를 수신합니다.

귀하의 경우에는 특정 mapStateToProps 함수를 지정하지 않아도 connect을 호출하면됩니다. 그래서 react-redux이 빈 인자를 가진 mapStateToProps에 대한 호출로 이것을 처리하고 있다고 생각합니다. 따라서 ownProps이 전달되는 이유는 무엇입니까?

+0

감사합니다. 나는 이것을 알고 있었지만, 이것은 내가 요구 한 것이 아닙니다. 내가 요청한 것조차도 (상점의 상태와 컨테이너의 ownProps로) 상태를 계산하지 않아도 ownProps도 내 프레젠테이션 구성 요소로 전달됩니다. 어떻게 이런 일이 있었는지 궁금해 ... – iamswf

+0

내 편집 된 답변을 확인하십시오. –

+0

감사합니다. 당신 말이 맞습니다. 나는 반응 - redux 소스 코드에서'defaultMergeProps'를 보았고, 그것은 기본적으로 자신의 소품을 합병 할 것이다. – iamswf