假设我想通过从应用程序外部调用该方法来控制我的应用程序的加载状态,如下所示:
setLoading(true)
我已经实现了一个类似的功能组件:
import React from 'react';
function App() {
const [loading, setLoading] = React.useState(true);
window.setLoading = (isLoading) => { setLoading(isLoading) };
if (loading) return 'Loading...';
return 'App content';
}
然而,我相信映射 setLoading()
到window
不是最好的方法。那么有可能以不同的方式做吗?
如果我有一个类组件,它看起来像这样:
import React from 'react';
class App extends React.Component {
constructor(props) {
super(props);
this.state = {
loading: true,
}
}
setLoading = (loading) => {
this.setState({ loading });
}
render() {
return(this.state.loading ? 'Loading...' : 'App content');
}
}
然后在渲染时,我将使用回调 ref 使整个组件及其所有方法可用。
<App ref={(app) => { window.app = app }} />
app.setLoading(true)
这种方法也会污染全局范围,但它更简洁 - 组件作为一个整体公开。
由于这两种方法都不是最佳的,我应该使用哪一种?有没有更好的东西?