reactjs - 如何从传递给孩子的函数访问父母的当前状态
问题描述
目前正在处理一个嵌套了 FileUploader 组件的表单。
我希望用户删除 FileUploader 子组件中的文件,但还需要在 Form 父组件中可以访问文件(blob)数据。
我将状态和 removeFile 回调传递给子组件。我面临的问题removeFile()
是从子组件调用时,它不引用当前文件。相反,挂载子组件之前文件的先前状态。
function Form() {
const [files, setFiles] = useState([]);
removeFile(key) {
console.log(files); // ISSUE: Returns previous state of files when the FileUpload is mounted.
var updated_files = files.removeFileByKey(key);
setFiles(updated_files);
}
return () {
<div>
// Other Form Inputs
<FileUploader files={files} setFiles={setFiles} removeFile={props.removeFile}/>
</div>
}
}
function FileUploader() {
onFileAdd(more_files) {
props.setFiles(more_files);
}
return (
props.files.map(file => {<File onClick={props.removeFile(file.key)} />)
)
}
**如何从函数 prop 访问文件的当前引用?
谢谢
解决方案
解决此问题的一种方法是将文件存储在父组件和子组件中,并创建一个函数以在子子组件中同步。
function Form() {
const [files, setFiles] = useState([]);
return () {
<div>
// Other Form Inputs
<FileUploader files={files} setFiles={setFiles} />
</div>
}
}
function FileUploader() {
const [filesCopy, setFilesCopy] = useState([]);
syncFiles() {
props.setFiles(filesCopy);
}
onFileAdd(more_files) {
setFilesCopy(more_files);
syncFiles();
}
removeFiles(key) {
console.log(filesCopy); // This will return current state of files
var updated_files = files.removeFileByKey(key);
syncFiles();
}
return (
filesCopy.map(file => {<File onClick={removeFile(file.key)} />)
)
}
!!但是,此解决方案很糟糕,因为它需要两次存储文件。这会占用大量内存。
推荐阅读
- mysql - 使用同一行中的另一列值更新列的所有值,除非重复条目
- mysql - 使用播放框架从 mysql 读取并插入 mongo 的运行脚本问题(多线程问题)
- python - Tox 运行 shell 命令并获得正确的退出代码
- java - 断点在 Eclipse 中的 JSP 页面上不起作用
- c# - 如何重播已通过 Azure 服务总线处理的消息?
- javascript - 我想使用 GET 方法将数据从 Angular js 传输到 servlet。说 null
- android - Kotlin 警报对话框。我是 android 编程新手,需要一些亮点
- php - 使用 php 在 html 中编写动态悬停标签
- ruby-on-rails - 简单迁移后未定义的方法“fetch_value”
- java - 使用 toString() 访问隐藏字段是否有问题