我正在实现一个附件组件,并试图通过调用URL成为一个好公民。在卸载我的组件以清理本地blob资源时,revokeObjectURL()。
使用一个类组件,我会使用ComponentWillUnmount,我认为这会很好地工作。现在我正在使用一个功能组件,我需要使用一个useffect钩子,它有一个调用URL的清理函数。revokeObjectUrl方法。这是我的第一个方法
useEffect(() => {
return () => {
attachments &&
attachments.forEach((a) => {
console.log('cleaning', a.uri);
URL.revokeObjectURL(a.uri);
});
};
});
但是附件道具是未定义的;我读过这是因为它的值是从组件第一次呈现时开始设置的。所以我试着把道具添加到依赖关系数组中
useEffect(() => {
return () => {
attachments &&
attachments.forEach((a) => {
console.log('cleaning', a.uri);
URL.revokeObjectURL(a.uri);
});
};
}, [attachments]);
但当附件对象更新时,每当上传新附件时,它就会运行清理代码。
实现useEffect的正确方法是什么,以便在卸载组件时只清理一次?我觉得这篇文章很好,但对解决方案不太满意,认为一定有更好的方法
这可能有助于:
const {getRootProps, getInputProps} = useDropzone({
accept: 'image/*',
onDrop: acceptedFiles => {
setFiles(acceptedFiles.map(file => Object.assign(file, {
preview: URL.createObjectURL(file)
})));
}
});
const thumbs = files.map(file => (
<div style={thumb} key={file.name}>
<div style={thumbInner}>
<img
src={file.preview}
style={img}
/>
</div>
</div>
));
useEffect(() => () => {
// Make sure to revoke the data uris to avoid memory leaks
files.forEach(file => URL.revokeObjectURL(file.preview));
}, [files]);
从…起https://react-dropzone.js.org/#section-预演
我遇到了同样的问题,并找到了一种适合我的方法。
我使用Ref来存储blob,而不是State。我只是在卸载组件时清理useEffect中的Ref。
React.useEffect(() => {
return () => {
// Cleanup blobs when component unmount
ref.current.map((file) => URL.revokeObjectURL(file));
};
}, []);
在JSX中,如何从引用的属性值中引用来自的值? 例如: 生成的HTML输出为:
问题内容: 在JSX中,如何从带引号的属性值内部引用值? 例如: 产生的HTML输出为: 问题答案: React(或JSX)不支持在属性值内进行变量插值,但您可以将任何JS表达式放在花括号内作为整个属性值,因此可以这样做:
我在 时,我将收到以下YellowBox警告。 警告:失败的proType:无效的prop类型的提供给,的预期实例。检查DatePickerIOS的渲染方法。 警告:失败的propType:未在中指定所需的prop。检查的渲染方法。 警告:propType失败:提供给的类型为的prop无效,应为
问题内容: 我正在尝试使用组件接收的道具使用React hook setState()设置状态。我尝试使用以下代码: 问题是加载组件时正在设置状态。但是,当它收到新的道具时,状态不会更新。在这种情况下如何更新状态?提前致谢。 问题答案: hooks函数参数仅使用一次,而不是每次prop更改时使用。您必须使用钩子来实现所谓的功能
问题内容: 注意:我在使用React Native时遇到了这个特定的问题,但是我想这也同样适用于React。 我有一个使用React.Component构建的React组件。我不需要设置状态,但是我有道具。我建议的语法如下: 我知道我可以使用函数来构造此组件,如下所示: 但是我更喜欢前者,因为我的组件会增长,可能会有状态等,我只想以相似的方式构建所有组件。 现在,我的linter抱怨拥有一个无用的
希望你们今天过得愉快。我是第一次对原生动画做出反应,遇到了一个问题。问题是我正在更新动画回调中的状态,就像这样 状态已更新,但当第二次调用此动画函数时,它无法访问最新状态。如果activeIndex为0,并且第一次运行时,activeIndex更新为1,但第二次调用此动画函数时,activeIndex仍然为0,并且仍然更新为1,依此类推。activeIndex在此回调外部更新—这只发生在回调内部。
问题内容: 假设我在其中一个组件上具有以下render函数。我从父元素传递了prop函数。 上级: 儿童: (我正在使用ES6类) 我无法在地图功能中使用,因为没有引用我所不想要的内容。我在哪里绑定它以便可以访问我的? 问题答案: 您可以设置为通过第二个参数回调 或者您可以使用没有自己的箭头功能,并且在其中指向封闭上下文
我遇到了一个大问题,其中有一个函数无法访问react中组件的道具: 但是当我把它改成一个胖箭头函数时,它工作得很好 这是为什么呢?我有什么不明白的?