Можно ли установить тип, который не вызывает метод render () в React-Native? дерево состояний mobx

Я сейчас знакомлюсь с React. Я выбрал mobx-state-tree для управления состоянием.

Поскольку я использовал шаблон MVP в своих проектах Android, я бы применил тот же принцип к mobx-state-tree.

Как я сейчас реализовал, это работает.

Однако я хотел бы определить реализацию ScreenView в модели.

Есть ли способ определить тип модели, который не запускает событие render ()?

Мой желаемый результат:

const AuthScreenModel = types
    .model('AuthStore', {
        screen: types.enumeration('Screen', ['auth', 'verification', 'name']),
        screenView: types.norefresh(ScreenViewInterface),
        phoneModel: types.optional(PhoneModel, {})
    })

Мой текущий обходной путь:

const AuthScreenModel = types
    .model('AuthStore', {
        screen: types.enumeration('Screen', ['auth', 'verification', 'name']),
        phoneModel: types.optional(PhoneModel, {})
    })
    .views((self: any) => {
        self.screenView = null
        return {
            getScreenIndex(): number {
                if (self.screen === 'verification')
                    return 1
                if (self.screen === 'name')
                    return 2
                return 0
            }
        }
    })
    .actions((self: any) => {
        return {
            setScreen(screen: string) {
                self.screen = screen
            },
            setScreenIndex(screenIndex: number) {
                self.screenIndex = screenIndex
            },
            setScreenView(screenView: AuthScreenView) {
                self.screenView = screenView
            },
            swipeNext() {
                if (self.screenView) {
                    self.screenView.scrollBy(self.getScreenIndex() < 2 ? 1 : 0)
                }
            },
            swipePrev() {
                if (self.screenView) {
                    self.screenView.scrollBy(self.getScreenIndex() > 0 ? -1 : 0)
                }
            }
        }
    })
const AuthScreenStore = AuthScreenModel.create({
    screen: 'auth',
    phoneModel: PhoneModel.create({
        country: CountryModel.create({}),
        phoneNumber: ''
    })
})

person sperling    schedule 11.11.2017    source источник


Ответы (1)


Используя этот метод жизненного цикла реакции, вы можете выбрать, вызывать или нет рендеринг.

Например, вы можете использовать shouldComponentUpdate (); для прослушивания обновлений и вернуть false, если вы не хотите отображать новое представление.

person Flavio_Lima    schedule 11.11.2017