Vue Component не показывает данные магазина - PullRequest
0 голосов
/ 09 июля 2019

Я создаю мелочи. В настоящее время я работаю на странице редактирования для вопроса. Компонент edit с именем EditQAForm собирает вопрос и ответы на этот конкретный вопрос и заполняет каждую форму соответствующего магазина VueX.

У меня сейчас проблема с ответами на этой странице. Когда EditQAForm смонтирован, он вызывает fetchQuestionAnswers, который получает все ответы на этот конкретный вопрос. Он делает это правильно, но затем, когда я пытаюсь отобразить любой из ответов на странице, он говорит, что форма пуста, несмотря на то, что я вижу в Vue DevTools, что она не пуста.

(Обратите внимание, что я удалил материал, который не имел отношения к этому. Поэтому предположим, что все методы, которые вы вызвали, существуют)

Вот смонтированный для EditQAForm:

mounted() {

            //gets the params from the url
            this.routeParams = this.$route.params;

            //gets the answers that belong to this question
            this.fetchQuestionAnswers(this.routeParams.question_id);

            //not important for this problem
            //get the question that needs to be edited
            this.fetchQuestion(this.routeParams.question_id);

        },

Как я это называю в вычисляемых свойствах EditQAForm:

computed: {
            ...mapGetters('question', ['formQuestionRoundID', 'questions', 'questionFields']),
            ...mapGetters('answer', ['answerFields', 'answers']),

            //Questions
            questionForm: {
                get() {
                    return this.questionFields;
                },
            },

            //Answers
            answerForm: {
                get() {
                    return this.answerFields;
                },
            },
        }

Вот магазин ответов

function initialState() {
    return {
        answers: [],
        answer: null,
        form: [
            {
                id: '',
                title: '',
                question_id: '',
                round_id: '',
                correct: false,
            },
            {
                id: '',
                title: '',
                question_id: '',
                round_id: '',
                correct: false,
            },
            {
                id: '',
                title: '',
                question_id: '',
                round_id: '',
                correct: false,
            },
        ]
    }
}

const getters = {
    answers(state){
        return state.answers;
    },
    answerFields(state){
        return state.form;
    },
    loading(state){
        return state.loading;
    },
};

const actions = {

    fetchQuestionAnswers({ commit, state }, question_id) {
        console.log("Form outside axios:");
        console.log(state.form);
        commit('setLoading', true);
        axios.get('/api/question/' + question_id + '/answers')
            .then(response => {
                commit('SET_ANSWERS_FORM', response.data);
                commit('setLoading', false);
            }).catch( error => {
            console.log(error.response);
        });
    },

const mutations = {

    SET_ANSWERS_FORM(state, answers){

        for(let $i = 0; $i < answers.length; $i++)
        {
            state.form[$i] = {
                id: answers[$i].id,
                title: answers[$i].title,
                question_id: answers[$i].question_id,
                round_id: answers[$i].round_id,
                correct: answers[$i].correct,
            }
        }
        // state.answers = answers;
    },
    UPDATE_TITLE(state, payload){
        state.form[payload.order].title = payload.title;
    },
    UPDATE_QUESTION_ID(state,payload){
        state.form[payload.order].question_id = payload.questionID;
    },
};

Что я пытаюсь вывести:

    <div>

        <h3 class="pb-3">Is first answer's title not empty?: {{!(answerForm[1].title === '')}}</h3>
        <h3 class="pb-3">{{answerForm[0].title }}</h3>

        <h3>{{answerForm}}</h3>

    </div>

То, что отображается на моем экране, наряду с тем, что говорит мне devtools, находится внутри массива answerForm:

enter image description here

Я реализовал вопросную часть очень похожим образом. Разница лишь в том, что форма не является массивом в хранилище вопросов, но, кроме того, она работает нормально Что я делаю не так?

1 Ответ

1 голос
/ 09 июля 2019

Я думаю, что проблема здесь:

state.form[$i] = {

Если вы используете индекс для обновления массива, это не вызовет систему реактивности, и вы получите устаревшую версию визуализированных компонентов.См. https://vuejs.org/v2/guide/list.html#Caveats

Существуют различные способы исправить это.Вы можете использовать Vue.set или просто создать совершенно новый массив.

Мне не совсем понятно, почему вы все это копируете, а не просто state.form = answers, что также решило быпроблема.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...