我收到此错误和两个警告:
不应为非交互式元素分配鼠标或键盘 事件侦听器。
和
道具验证中缺少视频和视频选择
import React from 'react';
const VideoListItem = ({ video, onVideoSelect }) => {
const imageUrl = video.snippet.thumbnails.default.url;
return (
<li onClick={() => onVideoSelect(video)} className="list-group-item">
<div className="video-list media">
<div className="media-left">
<img className="media-object" src={imageUrl} alt="Media" />
</div>
<div className="media-body">
<div className="media-heading">{video.snippet.title}</div>
</div>
</div>
</li>
);
};
export default VideoListItem;
有人会以正确的方式帮助我纠正这些问题吗?
第一个警告意味着,你不应该onClick
li
元素上安装事件侦听器,只应该在元素上<a>
或<button>
元素上。
第二个警告是关于不使用 PropType 包 - 你应该验证你传递给组件的 props - 它说传递的 props 应该是什么 - 在你的情况下video
是一个对象,onVideoSelect
是一个函数,对吧?您可以使用包 https://www.npmjs.com/package/prop-types 如下所示:
import PropTypes from 'prop-types'; // or PropTypes = require('prop-types');
const VideoListItem = ({ video, onVideoSelect }) => {...};
VideoListItem.propTypes = {
video: PropTypes.object.isRequired,
onVideoSelect: PropTypes.func.isRequired,
};
如果你省略isRequired
,你会收到关于 props 没有默认值的警告Airbnb假设你使用的是 linter 配置 - 看起来像这样(。你可以这样修复它:
VideoListItem.defaultProps = {
video: {},
onVideoSelect: () => {},
}