diff options
author | Paul Frazee <pfrazee@gmail.com> | 2022-10-26 14:48:15 -0500 |
---|---|---|
committer | Paul Frazee <pfrazee@gmail.com> | 2022-10-26 14:48:15 -0500 |
commit | 1ab8285ad37020094fa27aca95837a2e6650dcd4 (patch) | |
tree | 4a71387263b8914eac1910e415bfc80ebe9fcce7 /src | |
parent | 1983512fef37c5f27a048728815ae194bb24820b (diff) | |
download | voidsky-1ab8285ad37020094fa27aca95837a2e6650dcd4.tar.zst |
Fix some useEffect() cleanup issues
Diffstat (limited to 'src')
-rw-r--r-- | src/view/com/modals/ComposePost.tsx | 5 | ||||
-rw-r--r-- | src/view/com/util/UserInfoText.tsx | 6 | ||||
-rw-r--r-- | src/view/screens/Home.tsx | 9 | ||||
-rw-r--r-- | src/view/screens/Login.tsx | 6 | ||||
-rw-r--r-- | src/view/screens/Notifications.tsx | 9 | ||||
-rw-r--r-- | src/view/screens/Profile.tsx | 5 |
6 files changed, 38 insertions, 2 deletions
diff --git a/src/view/com/modals/ComposePost.tsx b/src/view/com/modals/ComposePost.tsx index 0032fbe7c..806b5d7a0 100644 --- a/src/view/com/modals/ComposePost.tsx +++ b/src/view/com/modals/ComposePost.tsx @@ -33,13 +33,18 @@ export function Component({ const [autocompleteOptions, setAutocompleteOptions] = useState<string[]>([]) useEffect(() => { + let aborted = false store.api.app.bsky .getUserFollows({ user: store.me.did || '', }) .then(res => { + if (aborted) return setFollowedUsers(res.data.follows) }) + return () => { + aborted = true + } }) const onChangeText = (newText: string) => { diff --git a/src/view/com/util/UserInfoText.tsx b/src/view/com/util/UserInfoText.tsx index 54cb93f71..536eef9e4 100644 --- a/src/view/com/util/UserInfoText.tsx +++ b/src/view/com/util/UserInfoText.tsx @@ -29,15 +29,21 @@ export function UserInfoText({ const [didFail, setFailed] = useState<boolean>(false) useEffect(() => { + let aborted = false // TODO use caching to reduce loads store.api.app.bsky.getProfile({user: did}).then( v => { + if (aborted) return setProfile(v.data) }, _err => { + if (aborted) return setFailed(true) }, ) + return () => { + aborted = true + } }, [did, store.api.app.bsky]) return ( diff --git a/src/view/screens/Home.tsx b/src/view/screens/Home.tsx index f48c8cde4..580106850 100644 --- a/src/view/screens/Home.tsx +++ b/src/view/screens/Home.tsx @@ -24,6 +24,7 @@ export const Home = observer(function Home({ ) useEffect(() => { + let aborted = false if (!visible) { return } @@ -33,7 +34,13 @@ export const Home = observer(function Home({ } else { store.nav.setTitle('Home') console.log('Fetching home feed') - defaultFeedView.setup().then(() => setHasSetup(true)) + defaultFeedView.setup().then(() => { + if (aborted) return + setHasSetup(true) + }) + } + return () => { + aborted = true } }, [visible, store]) diff --git a/src/view/screens/Login.tsx b/src/view/screens/Login.tsx index 91df7015d..bc40327bd 100644 --- a/src/view/screens/Login.tsx +++ b/src/view/screens/Login.tsx @@ -214,21 +214,27 @@ const CreateAccount = ({onPressBack}: {onPressBack: () => void}) => { const [username, setUsername] = useState<string>('') useEffect(() => { + let aborted = false if (serviceDescription || error) { return } store.session.describeService('http://localhost:2583/').then( desc => { + if (aborted) return setServiceDescription(desc) setUserDomain(desc.availableUserDomains[0]) }, err => { + if (aborted) return console.error(err) setError( 'Unable to contact your service. Please check your Internet connection.', ) }, ) + return () => { + aborted = true + } }, []) const onPressNext = async () => { diff --git a/src/view/screens/Notifications.tsx b/src/view/screens/Notifications.tsx index 60627385f..fac39acd2 100644 --- a/src/view/screens/Notifications.tsx +++ b/src/view/screens/Notifications.tsx @@ -13,6 +13,7 @@ export const Notifications = ({visible}: ScreenParams) => { const store = useStores() useEffect(() => { + let aborted = false if (!visible) { return } @@ -24,7 +25,13 @@ export const Notifications = ({visible}: ScreenParams) => { console.log('Fetching notifications feed') const newNotesView = new NotificationsViewModel(store, {}) setNotesView(newNotesView) - newNotesView.setup().then(() => setHasSetup(true)) + newNotesView.setup().then(() => { + if (aborted) return + setHasSetup(true) + }) + } + return () => { + aborted = true } }, [visible, store]) diff --git a/src/view/screens/Profile.tsx b/src/view/screens/Profile.tsx index 9fe094af1..f5f4f553e 100644 --- a/src/view/screens/Profile.tsx +++ b/src/view/screens/Profile.tsx @@ -23,6 +23,7 @@ export const Profile = observer(({visible, params}: ScreenParams) => { >() useEffect(() => { + let aborted = false if (!visible) { return } @@ -36,9 +37,13 @@ export const Profile = observer(({visible, params}: ScreenParams) => { const newProfileUiState = new ProfileUiModel(store, {user}) setProfileUiState(newProfileUiState) newProfileUiState.setup().then(() => { + if (aborted) return setHasSetup(true) }) } + return () => { + aborted = true + } }, [visible, params.name, store]) // events |