2017-11-18 19 views
0

Apollo ClientRedux-Form으로 편집 폼 구성 요소가 있으며, prop-types도 설치되어 있습니다.오류가 무엇인지 지정했을 때 이러한 React PropType 오류가 발생하는 이유는 무엇입니까?

시간이 지남에 따라 제 3 자 라이브러리가 proptypes가 누락되거나 일부 상위 구성 요소가 소품 유형을 올바르게 사용하지 않는 경우 이러한 유형의 메시지를 던질 수있는 독서를 기억하고 있습니다.

내가 어디에서 왜 보이는지 알 수 없기 때문에 그것에 대해 추리하는 것이 어렵습니다.

enter image description here 그러나,

나는 소품 유형이보기에 선언 한 :

PersonEdit.propTypes = { 
    ... ✂ 
    client: PropTypes.shape(PropTypes.any), 
    initialValues: PropTypes.shape(PropTypes.object), 
} 

PersonEdit.defaultProps = { 
    ... ✂ 
    client: undefined, 
    initialValues: undefined, 
} 

내가 여기

는 오류의 스크린 샷, Apollo에서 하나, 그리고 Redux-Form에서 하나입니다 또한 그들에 포함 된 와 함께 시도 :

PersonEdit.propTypes = { 
    ... ✂ 
    client: PropTypes.shape(PropTypes.any).isRequired, 
    initialValues: PropTypes.shape(PropTypes.object).isRequired, 
} 

이 소품 유형 관련 오류의 특성을 이해하는 데 도움을받을 수있는 사람이 있습니까?

이전에 내가 읽었던 부분이 매우 강하게 느껴졌으며 일부 "부모"논리 또는보기 전에 호출되는 것이 포함될 수 있지만이를 파악하는 방법이 확실하지 않습니다.

내 코드 이 (필수)을 지정하지 않은 경우 initialValues.isRequired 또는 client.isRequired이 표시된 이유를 알지 못합니다.

export default compose(
    connect(mapStateToProps, { 
    onServerError, 
    getPerson, 
    onBackPress, 
    }), 
    // graphql(PERSON_EDIT_MUTATION), 
    reduxForm({ 
    validate, 
    form: 'PersonEdit', 
    enableReinitialize: true, 
    }), 
)(withApollo(PersonEdit)) 

난 그냥 시간 componentWillMount 주위에 다양한 물건을 코드를 리믹스하고 자르고 시도 : 나는이 관련되어 기회가있을 것 같은 느낌 때문에

아, 그리고 여기,이 편집 양식에 대한 내 수출이다 그리고 componentDidMount이 실행되었고, 편집 폼 대신에 NotFoundPage 구성 요소가 실행되도록 모든 것을 주석 처리했으며 여전히 같은 오류가 발생하고 있습니다.

내가 propTypesdefaultProps 선언을 주석 처리하면 오류가 사라 지므로 어떻게 든 관련됩니다.

답변

1

귀하의 문제는 확실히 당신은 객체로 소품을 설정하고이 코드

PersonEdit.defaultProps = { 
    ... ✂ 
    client: undefined, 
    initialValues: undefined, 
} 

관련 당신은 설정이 정의되지 않은 그들의 가치입니다됩니다. 너 왜 그거 해?

는 것처럼 뭔가로 설정 (또는 어떤이는 정의되지 않습니다)

또한
PersonEdit.defaultProps = { 
    ... ✂ 
    client: null, 
    initialValues: null, 
} 

, 왜 당신이 설정하는 형식이 그렇게 확인? 왜 모양 안의 어떤 물건을 사용합니까? 너는 이것으로 그냥 쓸 수있다.

PersonEdit.propTypes = { 
    ... ✂ 
    client: PropTypes.any.isRequired, 
    initialValues: PropTypes.object.isRequired, 
} 

희망이있다!

+0

'PropTypes.any','PropTypes.object' 또는'PropTypes.array'는 설명이 충분하지 않아'eslint-config-airbnb'에 의해 금지되어 있기 때문에 사용할 수 없습니다. 'PropTypes.shape()'또는'PropTypes.arrayOf()'안에 사용할 수 있습니다. PropTypes.any는 아무것도 넣지 않는 것과 같습니다. 무엇이 허용되면 유형을 검사하는 이유는 무엇입니까? – agm1984

+0

나는 그 기본값을'null'으로 변경하려고했지만 변경하지 않았습니다. 나는 바벨 (babel)이 튀어 나오는 방식과 관련이 있다고 생각하기 시작했습니다. – agm1984

+0

그러나 경고에 감사 드리면서 다른 제약 조건을 조사한 결과, 오류가 사라지도록했습니다 : client : PropTypes.objectOf (PropTypes.any), 'initialValues ​​: PropTypes.objectOf (PropTypes. any), – agm1984