2017-09-29 6 views
0
에서 함수가 아닙니다

이 코드 블록은지도의 오류가 함수지도 jsx

{data && (data.devices || {}).map((obj, i) => 
    <div>{obj.name}</div> 
)} 

, 이미지도를 계속 다른 정의 된 데이터를 확인하기 위해 data && 않았다 난 그냥 이해가 안가 아니다 발생 . 또한 data.devices || {}을 사용하여 devices 속성이 있는지 확인하십시오.

I console.log(data.devices)은 정의되지 않은 반환 값이지만 객체로 대체해야합니까? 왜 여전히 부서지고 있니? data.devices가 비어있을 때, 기본 값이 빈 객체 따라서 map 때문에

+1

'.map'은 객체가 아닌 배열의 함수입니다. 'data.devices ||로 변경하십시오. []' –

+0

@NicholasTower는 그것을 시도했습니다. 여전히 동일합니다. '정의되지 않은 속성'map '을 읽을 수 없습니다.' –

+0

처음에는 오류가'map is not function'이라고 말했 읍니다. 변경 후에는 여전히 "동일합니다"라고 말하면서, 그것이 '정의되지 않은'속성 '지도를 읽을 수 없습니다'라고 말합니다. 오류가 변경되었는지 여부를 명확히 할 수 있습니까? –

답변

0

{}에 네이티브 .map 없기 때문에이 경우 data.devices || []

{(data && data.devices || []).map((obj, i) => 
    <div>{obj.name}</div> 
)} 
+0

이 작품은 데이터도'devices'라는 속성이없는 것입니다? –

+0

예,이 경우 맵은 빈 배열에서 실행됩니다. – Shreyas

0

data.devices || {} 교체 map A는 기능하지 않습니다하지 않습니다 함수를 호출합니다. 예를 들어이 걸릴 : 당신이 볼 수 있듯이

// simulate scenarios 
 
const data00 = undefined; 
 
const data01 = {}; 
 
const data02 = { devices: null }; 
 
const data03 = { devices: [] }; 
 
const data04 = { devices: [{ name: 'device01' }, { name: 'device02' }] } 
 

 

 
class Main extends React.Component { 
 
    render() { 
 
    return (
 
     <div> 
 
     {this.load(data00)} 
 
     {this.load(data01)} 
 
     {this.load(data02)} 
 
     {this.load(data03)} 
 
     {this.load(data04)} 
 
     </div> 
 
    ); 
 
    } 
 
    
 
    /** 
 
    * Loads data and renders the devices if there's any 
 
    */ 
 
    load(data) { 
 
    return (!!data && data.devices || []).map((obj, i) => 
 
     <div key={i}>{obj.name}</div> 
 
    ); 
 
    } 
 
} 
 

 
ReactDOM.render(<Main />, document.getElementById('main'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script> 
 
<div id="main"/>

data04의 장치가 렌더링됩니다.