【发布时间】:2020-12-06 16:35:45
【问题描述】:
我有以下代码,并希望尽可能使用挂钩将其转换为功能组件。我知道钩子似乎是 react 正在走向的方向。所以,我想确保我更多地使用功能组件而不是类来管理状态。
import React from 'react';
import AuthUserContext from './context';
import { withFirebase } from '../Firebase';
const withAuthentication = Component => {
class WithAuthentication extends React.Component {
constructor(props) {
super(props);
this.state = {
authUser: null,
};
}
componentDidMount() {
this.listener = this.props.firebase.auth.onAuthStateChanged(
authUser => {
authUser
? this.setState({ authUser })
: this.setState({ authUser: null });
},
);
}
componentWillUnmount() {
this.listener();
}
render() {
return (
<AuthUserContext.Provider value={this.state.authUser}>
<Component {...this.props} />
</AuthUserContext.Provider>
);
}
}
return withFirebase(WithAuthentication);
};
export default withAuthentication;
这是我尝试过的,不知道如何绕过组件标签。
const withAuthentication = (Component) => {
const WithAuthentication = (props) => {
const [authUser, setAuthUser] = useState(null);
useEffect(() => {
this.props.firebase.auth.onAuthStateChanged(
authUser => {
authUser
? setAuthUser(true)
: setAuthUser(null);
})
}, [authUser]);
return (
<AuthUserContext.Provider value={authUser}>
<Component {...this.props} />
</AuthUserContext.Provider>
);
}
return withFirebase(WithAuthentication);
};
【问题讨论】:
-
如果您提供您尝试执行的代码 sn-ps 以显示您尝试解决此问题的努力,那么您更有可能获得帮助。现在我们不确定你是否尝试过这个。
-
@CertainPerformance 我用我尝试过的内容编辑我的帖子。组件部分是我对如何从课堂切换感到困惑的部分。
标签: reactjs react-hooks