Реактивное состояние MobX на нативной реакции - PullRequest
1 голос
/ 17 марта 2019

Я работаю над созданием функции для страницы достижений, в которой уровни, изображение и цель будут меняться в зависимости от текущей оценки.Но кажется, что код не работает, когда страница смонтирована.

Я использую MobX для хранилища управления состояниями, и мой код ниже:

import { observable, computed, action } from 'mobx';
import { AsyncStorage } from 'react-native';

export default class Trophy {

    @observable ScoreBoard = [
     {
        scoreID: 0,
        scoreTitle: 'Trophy 0',
        scoreIcons: require('../../assets/images/robot-dev.png'),
        scoreCurrent: 1010,
        scoreTarget: 1000,
        scoreLevel: 1
    }, {
        scoreID: 1,
        scoreTitle: 'Trophy 1',
        scoreIcons: require('../../assets/images/robot-dev.png'),
        scoreCurrent: 0,
        scoreTarget: 1000,
        scoreLevel: 1
    }, {
        scoreID: 2,
        scoreTitle: 'Trophy 2',
        scoreIcons: require('../../assets/images/robot-dev.png'),
        scoreCurrent: 0,
        scoreTarget: 1000,
        scoreLevel: 1
    }, {
        scoreID: 3,
        scoreTitle: 'Trophy 3',
        scoreIcons: require('../../assets/images/robot-dev.png'),
        scoreCurrent: 0,
        scoreTarget: 1000,
        scoreLevel: 1
    }, {
        scoreID: 4,
        scoreTitle: 'Trophy 4',
        scoreIcons: require('../../assets/images/robot-dev.png'),
        scoreCurrent: 0,
        scoreTarget: 1000,
        scoreLevel: 1
    }, {
        scoreID: 5,
        scoreTitle: 'Trophy 5',
        scoreIcons: require('../../assets/images/robot-dev.png'),
        scoreCurrent: 0,
        scoreTarget: 1000,
        scoreLevel: 1
    }
]

@computed get updateScore() {
    // Dive into each score block
    this.ScoreBoard.forEach((score) => {
        if(score.scoreID === 1) {
            if(score.scoreCurrent >= 0 && score.scoreCurrent < 1000) {
                return console.log('level 1');
            }else if(score.scoreCurrent >= 1001 && score.scoreCurrent < 2000){
                return console.log('level 2');
                this.score.scoreLevel = 2;
                this.score.scoreTarget = 2000;
            }else if(score.scoreCurrent >= 2001 && score.scoreCurrent < 3000) {
                return console.log('level 3');
            }else if(score.scoreCurrent <= 3001) {
                return console.log('level 4');
            }
        }else if(score.scoreID === 2) {
            return console.log(score.scoreTitle);
        }else if(score.scoreID === 3) {
            return console.log(score.scoreTitle);
        }else if(score.scoreID === 4) {
                return console.log(score.scoreTitle);
           }else if(score.scoreID === 5) {
                return console.log(score.scoreTitle);
            }else {
                return console.log(score.scoreTitle);
            }
        });
    }
}

Моя идея - каждый раз, когда этот магазинработает, логика получает текущую оценку от каждого блока оценки, тогда это поможет установить правильное изображение, название и целевую оценку на основе текущей оценки.И вся логика будет сначала обрабатываться в этом хранилище, а затем вводиться на страницу просмотра с правильными данными, для более чистой структуры кода.

, но проблема в том, что логика даже не выдает файл console.log.

Могу ли я узнать, как это исправить, чтобы он работал?почему он не работает так, как я хочу?

спасибо!Терима Касых!

...