React hooks:如何在构造器中初始化了类组件的功能组件中编写变量

时间:2019-05-31 09:55:53

标签: reactjs react-hooks

我在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方法中使用了一些道具。

2 个答案:

答案 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} /> }