我正在清理一个监听我的数据库的组件,当它有响应时,导航到一个特定的屏幕。
这是我的原始组件:
function MyComponent() {
const { navigation } = useNavigation();
const start = (data) => {
navigation.navigate("Somewhere", { data });
};
const listenData = (doc) => {
const { something } = doc.data();
start(something);
};
useEffect(() => {
const listener = listenDB((data) => {
setData(data);
};
return () => listener();
}, []);
return ...;
}
我正在考虑将所有逻辑移动到自定义挂钩 useMyComponentLogic();
function useMyComponentLogic() {
const { navigation } = useNavigation();
const start = (data) => {
navigation.navigate("Somewhere", { data });
};
const listenData = (doc) => {
const { something } = doc.data();
start(something);
};
useEffect(() => {
const listener = listenDB((data) => {
setData(data);
};
return () => listener();
}, []);
}
然后在我的组件中使用它:
function MyComponent() {
useMyComponentLogic();
return <View>...</View>;
}
有了这个,我的钩子似乎做了两件事:
1. Handle navigation
2. Listening to db
将所有职责(例如在侦听数据时导航)委托给自定义钩子是否是一种反模式?