Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Feature] 탭바기능 및 화면연결 TCA로 리팩토링 #138

Open
wants to merge 4 commits into
base: TCA
Choose a base branch
from

Conversation

Seokki-Kwon
Copy link
Contributor

AS-IS

기존의 화면플로우 구조를

TO-BE

TCA를 사용한 구조로 변경합니다.

KEY-POINT

  • 탭뷰UI 구성
  • 탭뷰에 나타나는 각화면 파일 생성
  • 탭뷰기능을 담당하는 MainTabFeature 구성
  • 앱전체 상태를 관리하는 AppFeature 구성

TCA를 이용하여 앱전체의 화면플로우 구성

AppFeature: 앱전체의 상태를 관리하는 최상위 리듀서입니다
MainTabFeature: 탭바리듀서를 embed 한다.

AppFeature에서 자식리듀서의 상태를 관리하고 scope을 정의하여 하위리듀서를 넘겨줍니다 이렇게하면 자식리듀서에서 발생한 액션을 부모리듀서에서 감지하여 추가적인 로직을 실행할 수 있습니다.

   Reduce { state, action in
            switch action {
            case .requestLogin:
                return .run { send in
                    try await Task.sleep(nanoseconds: 2_000_000_000)
                    await send(.loginCompleted)
                }
           // 하위리듀서 SettingFeature의 액션을 전달받음
            case .mainTab(.setting(.logoutButtonTap)):
                state.loginState = .onboarding
                return .none
            case .login(.loginButtonTap):
                state.loginState = .home
                return .none
            case .loginCompleted:
                state.loginState = .home
                return .none
            default:
                return .none
            }
        }
...

AppFeature에서 settingReducer의 logoutButtonTap 액션을 전달받아 상태를 변경합니다.

자식리듀러서넘겨줄때 넘겨줄 scope을 정의해야합니다.

SettingView(store: store.scope(state: \.setting, action: \.setting))

SCREENSHOT (Optional)

TCA 공식문서 Scope
https://pointfreeco.github.io/swift-composable-architecture/0.54.0/documentation/composablearchitecture/scope/

@Seokki-Kwon Seokki-Kwon added 🔥 Feat 새로운 기능 관련 🎨 UI UI 관련 TCA labels Jan 3, 2025
@Seokki-Kwon Seokki-Kwon requested a review from Choe-ju January 3, 2025 15:02
@Seokki-Kwon Seokki-Kwon self-assigned this Jan 3, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
🔥 Feat 새로운 기능 관련 TCA 🎨 UI UI 관련
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant