reactjs - 单击时返回 null 而不是对象
问题描述
我想这真的很基本。我正在尝试将 onClick 回调添加到我的脚本中,并且我相信我缺少一个负责查找实际项目的值。
主脚本
import React from 'react';
import { CSVLink } from 'react-csv';
import { data } from 'constants/data';
import GetAppIcon from '@material-ui/icons/GetApp';
import PropTypes from 'prop-types';
const handleClick = (callback) => {
callback(callback);
};
const DownloadData = (props) => {
const { callback } = props;
return (
<>
<CSVLink
data={data}
onClick={() => handleClick(callback)}
>
<GetAppIcon />
</CSVLink>
</>
);
};
DownloadData.propTypes = {
callback: PropTypes.func.isRequired,
};
export default DownloadData;
故事书代码
import React from 'react';
import DownloadData from 'common/components/DownloadData';
import { data } from 'constants/data';
import { action } from '@storybook/addon-actions';
export default {
title: 'DownloadData',
component: DownloadData,
};
export const download = () => (
<DownloadData
data={data}
callback={action('icon-clicked')}
/>
);
所以现在点击故事书中的这段代码,我会得到空值,我正在寻找一个对象。
解决方案
我可以看到的潜在问题之一是handleClick
,当您导入组件时,您的函数存储在内存中。这意味着您要保留对不存在的内容的引用,并希望在使用回调属性渲染组件时使用它。
组件的每个实例都应该有自己的功能。要修复它,请在组件内移动函数声明。像这样:
const Foo = ({ callback }) => {
// handleClick needs to be inside here
const handleClick = callback => {
console.log("clicked");
callback(callback);
};
return <div onClick={() => handleClick(callback)}>Click me!</div>;
};
如果这不能解决您的问题,那么您实施 Storybook 的方式就有问题。就像缺少上下文一样。
推荐阅读
- python-3.x - python weasyprint OSError 错误路径
- canvas - 带有 rasa 的 Google 交互式画布
- docker - docker build certbot 电子邮件输入
- google-cloud-firestore - Firebase 应用程序在 Google Cloud Build 的测试阶段挂起
- mysql - 选择特定日期或之前的数据
- realm - 从结果中过滤最高数值
- javascript - 循环 JSON 时无法在 Javascript 中使用 IN 运算符
- xml - 如何将 XML Powershell system.object[] 数组导出到 CSV 文件
- sql - 增量 SQL 查询的 AWS 等效项
- ios - 查看协调员/代表消失功能?