我试图使用共享祖先在文件上传程序和表之间中继数据。我有一个文件上传程序,但一旦我添加了JSON文件,我就会收到错误TypeError:setProductState不是一个函数。
当我将inputJson文件记录到控制台中时,它会运行,但当我应用setProductState并输入我的文件时,我会收到此错误。
根据我所读到的,我不需要绑定,因为我使用箭头语法,但我可能需要一个“this”。
欢迎提出任何想法或批评。
function FileUploader({ productState, setProductState }) {
const onDrop = useCallback((acceptedFiles) => {
// this.setProductState = this.setProductState.bind(this); tried
acceptedFiles.forEach((file) => {
const reader = new FileReader()
reader.onload = () => {
const inputJson =
this.inputJson = inputJson //tried
JSON.parse(reader.result)
setProductState(inputJson); //console.log goes through
}
reader.readAsText(file)
})
}, [])
const {getRootProps, getInputProps} = useDropzone({onDrop})
return (
<div {...getRootProps({style})}>
<input {...getInputProps()} value={productState}/>
<p>Drag files here, or click to browse</p>
</div>
)
}
祖先.js
import React, { useState } from 'react'
import FileUploader from './FileUploader'
import Table from './Table'
const Ancestor = () => {
const [products, setProducts] = useState({});
return <>
<FileUploader productState={products} setProductState={setProducts} />
<Table productState={products} />
</>;
}
export default Ancestor;
我相信您可能会对这个
关键字的工作原理感到困惑。在FileUploader组件中,这将是对FileUploader的引用,而不是对祖先的引用。
您不需要引用Ancestor,因为您正在将
产品
和setProducts
作为道具传递。这才是正确的做法。
此外,您可能不打算在接受文件上做一个foreach,因为您似乎只需要一个文件,对吗?
试试这个。
function FileUploader(props) {
// Define an onDrop function to handle drop events
const onDrop = useCallback((acceptedFiles) => {
// Get the first file in the list of acceptedFiles
const file = acceptedFiles[0];
// Create a FileReader
const reader = new FileReader();
// Create a function to handle the reader onload event
reader.onload = () => {
// JSON parse the result from read as text
let parsed = JSON.parse(reader.result);
// Call the setProductState function from Ancestor component
props.setProductState(parsed);
};
// Read the file, triggering the onload event handler
reader.readAsText(file);
}, []);
const { getRootProps, getInputProps } = useDropzone({ onDrop });
return (
<div {...getRootProps({ style })}>
<input {...getInputProps()} value={props.productState} />
<p>Drag files here, or click to browse</p>
</div>
);
}
我尝试在云函数中使用Firestore,但遇到了错误 数据库。集合(…)。文档(…)。集合(…)。文档(…)。add不是promise的功能 我先读了这些主题,然后又读了其他主题。但我没有帮我。包裹。json外观 云功能之一 此代码来自函数 我怎样才能修复它?
正在尝试使用 手机短信插件 将短信功能添加到应用程序中。我已经完成了文档中提到的安装- 我添加行 但当我加上 在构造函数参数中,它在JS控制台中抛出以下错误,页面停止工作。 果心js:12501错误错误:未捕获(promise中):类型错误:对象(…)不是函数类型错误:对象(…)不是索引处的函数。js:93 at模块/node\u模块/@离子本机/短信/索引。js(index.js:142)at
我想做的是将一个Map添加到一个ArrayList中,然后添加到一个JsonArray中。我打算做的是直接将映射添加到json数组中。
我想在包含日期列的dataframe上使用函数,这样我就可以创建新列,该列将提供记录与哪个季度相关联的信息。 我试过的东西如下: 另外,当我尝试使用函数名的import语句时,它会给出如下错误:
问题内容: 这个例子 在我看来,它与ajax加载函数的示例相同。正如代码片段可以告诉您的那样,它实际上会出错 我究竟做错了什么? 问题答案: https://code.jquery.com/jquery-3.2.1.slim.min.js是jquery的精简版,不包含ajax。slim是Express服务器中随附的默认版本。使用https://code.jquery.com/jquery-3.2.
问题内容: 过去,已经进行了许多尝试以在Python中添加超时功能,以便在指定的时间限制到期时,等待的代码可以继续运行。不幸的是,以前的配方要么允许正在运行的功能继续运行并消耗资源,要么使用特定于平台的线程终止方法终止该功能。该Wiki的目的是针对这个问题开发跨平台的答案,许多程序员必须针对各种编程项目解决该问题。 编辑: 这段代码是为Python 3.x编写的,并非为装饰类方法而设计。该模块并非