(反应JS)不应为非交互式元素分配鼠标或键盘事件侦听器



我收到此错误和两个警告:

不应为非交互式元素分配鼠标或键盘 事件侦听器。

道具验证中缺少视频和视频选择

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: () => {},
}

最新更新