2016-07-13 1 views
1

반응에 상태지도 나 소품지도 아래 목록은 여기 내 tbody 태그 안에 무슨이다.데 문제가

시도 된 로깅 this.props.listingData & 시도했습니다.

[{"location_id":1,"location":"HKG","description":"Hong Kong","update_by":null,"update_time":null,"create_by":null,"create_time":null,"rec_state":0},{"location_id":2,"location":"KUL","description":"Kuala Lumpur","update_by":null,"update_time":null,"create_by":null,"create_time":null,"rec_state":0}] 

가 작동해야 하는가 : 여기 내가 사용하는 샘플 map 데이터

입니까? 내 getDefaultProps

:

getDefaultProps() { 
     return { 
      //value: 'default value' //called as this.props.value 
      listingData: [{"location_id":1,"location":"HKG","description":"Hong Kong","update_by":null,"update_time":null,"create_by":null,"create_time":null,"rec_state":0},{"location_id":2,"location":"KUL","description":"Kuala Lumpur","update_by":null,"update_time":null,"create_by":null,"create_time":null,"rec_state":0}] 
     }; 
    } 

이 시도하고 여전히 오류가 발생.

+1

'this.props.listingData'는 언제 할당 되었습니까? 구성 요소가 값을 가지기 전에 렌더링되지 않았습니까? –

+0

앱이 시작되면 데이터 목록이 표시되고 할당됩니다. 나는'componentWillMount()'시도와'componentDidMount()'도 작동하지만'undefined' 오류의 map을 얻습니다. –

+0

더 방어적인 자세를 취하십시오 :'{this.props.listingData && this.props.listingData.map (...' –

답변

1

당신은 문서 https://facebook.github.io/react/docs/reusable-components.html#default-prop-values에 따라, 당신은 구성 요소를 만들 때 좋은 방법입니다 기본 소품을 정의 할 필요가 : 정적 속성 지원

var MyComponent = React.createClass({ 

    getDefaultProps: function() { 
    return { 
     listingData: [] 
    }; 
    }, 

    render: function() { 
    //... 
    } 

}); 

또는 es2015

class MyComponent extends React.Component { 

    render() { 
    //... 
    } 

} 

MyComponent.defaultProps = { 
    listingData: [] 
} 

class MyComponent extends React.Component { 

    static defaultProps = { 
    listingData: [] 
    }; 

    render() { 
    //... 
    } 

} 
+0

ES6 btw를 사용하고 있습니다. 샘플 데이터를 추가하고 추가 작업을 수행했습니다. 여전히 같은 오류가 발생합니다. 내 코드를 사용하여 내 게시물을 편집했습니다. 확인해 주시겠습니까? –

+1

좋아, 내가 es6 버전 –

+0

로 업데이 트됩니다 감사합니다, 그것은 작동 –

0

비동기 가져 오기를 수행하고이 구성 요소에 대한 응답을 응답으로 보내는 것과 같은 소리가납니다. 즉, 구성 요소가 처음 렌더링 될 때 정의되지 않습니다 (render 안에 중단 점을 넣고 직접보십시오).

위에서 보았 듯이 undefinedmap을 부를 수 없으므로 데이터가 아직없는 경우 다른 것을 반환해야합니다. 개인적으로 나는 다음 라인을 따라 뭔가를 선호합니다 :

if (!this.props.listingData) return null; 

return this.props.listingData.map(listingData => // ... 

분명히 다른 방법으로 이것을 쓸 수 있습니다. 또는 기본 소품을 제공 할 수 있습니다.

참고 location.id이 고유하면 루프 인덱스가 아닌 key으로 사용해야합니다.

+0

'default props'를 사용할 때 예제를 보여줄 수 있습니까? 나는 그것을 사용하려했지만 내가 잘못하고 있다고 생각한다. 감사. Btw 나는 ES6을 사용하고있다 –

+0

응답을 받기 전에 명시 적으로'undefined'를 소품으로 전달한다면, 나는 기본 소품이 작동한다고 생각하지 않는다. –