【发布时间】:2017-07-05 10:59:00
【问题描述】:
我刚刚开始探索 React.js,但我无法弄清楚为什么我整天都在 StudyDayList 组件中尝试map 时出现错误:
1) 警告:React.createElement:类型无效 -- 期望一个字符串(对于内置组件)或一个类/函数(对于 复合组件)但得到:未定义。您可能忘记导出 你的组件来自它定义的文件。检查渲染方法 的
StudyDayList。 在 StudyDayList 中2) 未捕获错误:元素类型无效:应为字符串(对于 内置组件)或类/函数(用于复合组件) 但得到:未定义。您可能忘记从 定义它的文件。检查
StudyDayList的渲染方法。
// index.js
import React from 'react';
import {render} from 'react-dom';
import {StudyDayList} from '../src/components/StudyDayList';
window.React = React;
render(
<StudyDayList days={
[
{
study: "React Essentials",
date: new Date("4/7/2017"),
practice: true
},
{
study: "Web Security",
date: new Date("3/7/2017"),
practice: false
}
]
} />,
document.getElementById('react-container')
);
我尝试过的
代码的这个特定部分不起作用。如果我在 StudyDayList.js 中删除这部分代码,所有显示都很好:
{days.map((day, i) =>
<StudyDayRow key={i}
study={day.study}
date={day.date}
practice={day.practice} />
)}
另外,我尝试更改语法:
{days.map(day, i => (
<StudyDayRow key={i}
study={day.study}
date={day.date}
practice={day.practice} />
))}
它给出了另一个错误:
Uncaught ReferenceError: day is not defined
我通过propTypes检查了index.js中days的值,days: PropTypes.array是true,长度不为空。
StudyDayList 组件
// StudyDayList.js
import Terrain from 'react-icons/lib/md/terrain';
import StudyDayRow from './StudyDayRow';
export const StudyDayList = ({days}) => (
<table>
<thead>
<tr>
<th>Date</th>
<th>Study</th>
<th>Practice</th>
</tr>
</thead>
<tbody>
// The part of code which I was removing
{days.map((day, i) =>
<StudyDayRow key={i}
study={day.study}
date={day.date}
practice={day.practice} />
)}
</tbody>
</table>
)
StudyDayRow 组件
我不确定 StudyDayRow 组件是否会导致错误。我认为它不能,但我已经附上了它以防万一。
// StudyDayRow.js
import Terrain from 'react-icons/lib/md/terrain';
export const StudyDayRow = ({study, date, practice}) => (
<tr>
<td>
{date.getMonth()+1}/{date.getDate()}/{date.getFullYear()}
</td>
<td>
{study}
</td>
<td>
{(practice) ? <Terrain /> : null}
</td>
</tr>
)
【问题讨论】:
-
您确定 Terrain 是否按预期工作?
-
是的,它与另一个组件一起正常显示,我刚刚通过完全删除它来检查它。
标签: arrays reactjs object rendering