2016-11-12 125 views
0

我正在使用Recharts庫構建圖表庫。React - TypeError:無法讀取未定義的屬性「地圖」

這些都是我在

數據燈具的工作文件被charts.js

const charts = [ 
    {name: 'Page A', uv: 4000, pv: 2400, amt: 2400}, 
    {name: 'Page B', uv: 3000, pv: 1398, amt: 2210}, 
    {name: 'Page C', uv: 2000, pv: 9800, amt: 2290}, 
    {name: 'Page D', uv: 2780, pv: 3908, amt: 2000}, 
    {name: 'Page E', uv: 1890, pv: 4800, amt: 2181}, 
    {name: 'Page F', uv: 2390, pv: 3800, amt: 2500}, 
    {name: 'Page G', uv: 3490, pv: 4300, amt: 2100}, 
]; 

export default charts; 

數據在我的商店正確導入與別的數據的其餘

然後我有我的ChartsGrid.js錯誤來自

import React from 'react'; 
import Chart from './Chart'; 

export default class ChartsGrid extends React.Component{ 
    render() { 
    return (
     <div className="grid"> 
     {this.props.charts.map((chart, i) => <Chart {...this.props} key={i} i={i} chart={chart} />)} 
     </div> 
    ) 
    } 
}; 

,在這裏我的圖表組件從recharts庫

import React from 'react'; 
import { Link } from 'react-router'; 
import { ResponsiveContainer, LineChart, Line, XAxis, YAxis, ReferenceLine, 
    ReferenceDot, Tooltip, CartesianGrid, Legend, Brush } from 'recharts'; 

export default class Chart extends React.Component { 
    render() { 
    const { chart, i} = this.props; 
    return (
     <LineChart width={600} height={300} data={charts} 
      margin={{top: 5, right: 30, left: 20, bottom: 5}}> 
     <XAxis dataKey="name"/> 
     <YAxis/> 
     <CartesianGrid strokeDasharray="3 3"/> 
     <Tooltip/> 
     <Legend /> 
     <Line type="monotone" dataKey="pv" stroke="#8884d8" activeDot={{r: 8}}/> 
     <Line type="monotone" dataKey="uv" stroke="#82ca9d" /> 
     </LineChart> 
    ); 
    } 
}; 

導入模塊爲什麼會引發此錯誤類型錯誤:無法讀取屬性「地圖」的不確定?什麼是未定義的?

+2

'this.props.charts.map' - >這會拋出錯誤,因此'this.props.charts'是'undefined' – vlaz

+0

那我該如何定義它呢?「圖表」實際上是在我的商店中定義的 – Koala7

+0

我看不到您導入ChartsGrid的位置..我期望您 Aus

回答

1

看起來你還沒有導入charts.js文件然後使用charts陣列。

你可以導入charts.js文件,其中使用ChartsGrid組件,並通過charts爲道具:

import charts from './charts' 
... 
<ChartsGrid charts={charts} /> 

或者,你可以直接在ChartsGrid.js改用charts對象this.props

import charts from './charts' 

export default class ChartsGrid extends React.Component{ 
    render() { 
    return (
     <div className="grid"> 
     {charts.map((chart, i) => 
      <Chart {...this.props} key={i} i={i} chart={chart} />)} 
     </div> 
    ) 
    } 
} 

charts.map代替this.props.charts.map因爲charts被直接導入的文件,而不是爲道具到組件被傳遞在(如在第一溶液)。

0

使用react dev tools來驗證this.props.charts作爲數組進入。

如果你想有一個更好的答案,包括通過chartsChartsGrid

0

我認爲你需要調用「ChartsGrid」標籤,並在傳遞一個屬性名稱爲「圖表」組件代碼。如:

<ChartsGrid charts={}...> 

我無法找到您使用'ChartsGrid'標籤的位置。

0

變化ChartsGrid.js到

import React from 'react'; 
import Chart from './Chart'; 

export default class ChartsGrid extends React.Component{ 
    render() { 
    if(this.props.charts){ 
    return (
     <div className="grid"> 
     {this.props.charts.map((chart, i) => <Chart {...this.props} key={i} i={i} chart={chart} />)} 
     </div> 
    ) 
    } 
    else return(
     <div className="grid"></div> 
    ) 
    } 
}; 
0

你缺少父組件

Parent.js

import ChartsGrid from './ChartsGrid'; 

const charts = [ 
    {name: 'Page A', uv: 4000, pv: 2400, amt: 2400}, 
    {name: 'Page B', uv: 3000, pv: 1398, amt: 2210}, 
    {name: 'Page C', uv: 2000, pv: 9800, amt: 2290}, 
]; 

class ParentComponent extends React.Component{ 
    render(){ 
     return(<ChartsGrid charts={charts}/>) 
    } 
} 
相關問題