我在React中使用uppy,他们通常将uppy初始化为全局变量。在React中,他们允许这样做:
class MyComponent extends React.Component {
constructor (props) {
super(props)
this.uppy = Uppy()
.use(Transloadit, {})
}
componentWillUnmount () {
this.uppy.close()
}
render () {
return <StatusBar uppy={this.uppy} />
}
}
如何在带有钩子的功能组件中编写此代码?幼稚的方法如下(在阅读this issue后不希望它起作用):
const MyComponent = () => {
const uppy = Uppy()
.use(Transloadit, {})
useEffect(() => {
return () => uppy.close()
})
return <StatusBar uppy={uppy} />
}
PS:这需要在功能组件内部完成,因为我在uppy.use
方法中使用了一些道具。
答案 0 :(得分:2)
可以使用useRef
钩子(更多信息here)来初始化功能组件中的变量。另外,由于只希望在卸载时运行清除功能,而不是在每次重新渲染时都运行清除功能,因此应将空的[]
作为第二个参数传递给useEffect
const MyComponent = () => {
const uppy = useRef(Uppy()
.use(Transloadit, {}))
useEffect(() => {
return () => uppy.current.close()
}, [])
return <StatusBar uppy={uppy.current} />
}
答案 1 :(得分:0)
您可以这样实现。
> const MyComponent = (props) => { let uppy;
>
> useEffect(() => {
> uppy = Uppy()
> .use(Transloadit, {});
> return () => uppy.close() }, [])
>
> return <StatusBar uppy={uppy} /> }