【发布时间】:2020-08-26 07:10:42
【问题描述】:
简介
我的应用程序的不同屏幕上有多个侦听器。注销是在我的个人资料屏幕的子组件中实现的,并且由于我没有使用 redux,我必须将每个侦听器(实际上我将它们都存储在父组件的引用中)传递给它,以便在之前分离它们退出。
问题
这不是很容易处理,因为我必须将多个侦听器从子级传递给一个共同的父级作为道具,然后传递给 SignOut 组件...对组件树进行长时间的浏览。
真的有必要在退出之前分离我的所有 Firebase 侦听器吗?如果没有会发生什么(错误或其他东西......)?
Pd:我正在使用"Protected routes" 模式进行导航
代码
退出组件
const SignOut = withFirebase(function SignOut(props) {
// ... stuff
const signOut = () => {
const { firebase, onSignOut } = props;
// Do the neccessary stuff before signing out
onSignOut();
// Change the authentication state
firebase.signOut();
};
// ... stuff
};
配置文件屏幕组件(退出组件的直接父级)
...
const {attachListener, detachListeners} = props;
// ... code attaching a new firestore listener
// ... stuff
return (
...
<SignOut detachListeners={detachListeners} />
)
公共父级(包含所有侦听器的引用)
...
const listeners = useRef([]).current;
const attachListener = (listener) => listeners.push(listener);
const dettachListeners = () => listeners.forEach(listener => listener());
useEffect(() => {
// cleanup
return () => {
detachListeners();
}
}, []);
return (
<>
<Profile attachListener={attachListener} detachListener={detachListener} />
<OtherComponentWithListeners1 attachListener={attachListener} />
<OtherComponentWithListeners2 attachListener={attachListener} />
</>
)
【问题讨论】:
标签: javascript reactjs firebase react-native google-cloud-firestore