При использовании ReSwift с подсостоянием, как я могу избежать получения нежелательных обновлений подсостояния, когда обновляется другое подсостояние? - PullRequest
0 голосов
/ 02 марта 2020

При использовании ReSwift с подсостоянием, как я могу избежать получения нежелательного обновления подсостояния ( SubstateA ), при обновлении другого подсостояния (SubstateB)

Я думал, что это была целая точка, имеющая подсостояние ...

State.swift

struct MainState: StateType {
    var subStateA: SubstateA?
    var subStateB: SubstateB?
}

struct SubstateA: StateType {
    let value: String
}

struct SubstateB: StateType {
    let value: String
}

Store.swift

let mainStore = ReSwift.Store<MainState>(reducer: { action, state -> MainState in

    var newState = state ?? MainState()

    switch action {

    case let anAction as UpdateSubstateA:
        newState.subStateA = newState.subStateA ?? SubstateA(value: anAction.value)

    case let anAction as UpdateSubstateB:
        newState.subStateB = newState.subStateB ?? SubstateB(value: anAction.value)

    default:
        break
    }
    return newState
}, state: nil)

Actions.swift

struct UpdateSubstateA: Action {
    let value:String
}

struct UpdateSubstateB: Action {
    let value:String
}

ViewController.swift

class ViewController: UIViewController {

    override func viewWillAppear(_ animated: Bool) {

        mainStore.subscribe(self)  { $0.select { state in (state.subStateB ) } }

        mainStore.dispatch(UpdateSubstateA(value: "a"))
        mainStore.dispatch(UpdateSubstateB(value: "b"))
    }
}

extension ViewController: StoreSubscriber {

    func newState(state: SubstateB?) {
        print("SubstateB updated")
    }

    typealias StoreSubscriberStateType = SubstateB?
}

Хотя я отправил одно действие обновления для SubstateB, я также получаю события newState при обновлении SubstateA

Консоль

SubstateB updated
SubstateB updated
SubstateB updated
...