Реагировать на собственный редукс, не обновляя реквизиты при изменении состояния - PullRequest
2 голосов
/ 07 октября 2019

Мои реквизиты не обновляются при изменении состояния. Я НЕ изменяю состояние ни в одном из редукторов, и все работает как надо, кроме того, что мой реквизит не обновляется.

Мой основной компонент с функцией подключения, все передается другим компонентам через реквизиты:

const mapStateToProps = state => ({
    blocks: state.blocks,
    quizes: state.quizes,
    auth: state.auth,
    courses: state.courses,
    tasks: state.tasks
});

const mapDispatchToProps = dispatch => ({
    authActions: bindActionCreators(authActions, dispatch),
    quizActions: bindActionCreators(quizActions, dispatch),
    blockActions: bindActionCreators(blockActions, dispatch),
    courseActions: bindActionCreators(courseActions, dispatch),
    taskActions: bindActionCreators(taskActions, dispatch)
});
export default connect(
    mapStateToProps,
    mapDispatchToProps
)(BlockList);

Мой тест-редуктор:

// @flow
import AnyAction from "redux";
import { ActionTypes } from "./../constants";

const initialState = {
    rightAnswers: 0,
    index: 0,
    wrongAnswers: 0,
    uri: null
};

const someReduceFunction = () => {};
export default function Quizes(state = initialState, action: AnyAction) {
    switch (action.type) {
        case ActionTypes.RIGHT_ANSWER:
            return Object.assign({}, state, {
                index: state.index + 1,
                rightAnswers: state.rightAnswers + 1,
                uri: "https://www.shareicon.net/data/256x256/2016/08/20/817720_check_395x512.png"
            });
        case ActionTypes.WRONG_ANSWER:
            return Object.assign({}, state, {
                index: state.index + 1,
                wrongAnswers: state.wrongAnswers + 1,
                uri: "https://www.cpronetwork.com/media/d10b9ef5fc45ce16ba12240e263a7d8b.png?preset=m-thumb"
            });

        default:
            return state;
    }
}

Действие теста:

// @flow
import { ActionTypes } from "../constants";

export const rightAnswer = () => {
    return {
        type: ActionTypes.RIGHT_ANSWER
    };
};

export const wrongAnswer = () => {
    return {
        type: ActionTypes.WRONG_ANSWER
    };
};

Quiz.js: quizActions и викторины оба проходят весь путь через реквизиты:

        const { navigation } = this.props;
        const { task, image, quiz, rightAction, block, quizes, quizActions } = navigation.state.params;
        const { rightAnswers, index, wrongAnswers, uri } = quizes;
        console.log(quizes);
        const current = quiz.questions[index];
        const percentage = (rightAnswers / quiz.numberOfQuestions) * 100;
.
.
.
<Button
    style={styles.button}
    label={current.option1}
    onPress={() => {
        if (current.option1 === current.rightAnswer) {
            quizActions.rightAnswer();
        } else {
            quizActions.wrongAnswer();
        }
    }}
/>

console.log (викторины) выводит исходное состояние. Тогда ничего не печатает.

Из файлов console.logs в действии и редуктора я знаю, что состояние меняется. Только реквизиты - это не так.

Это может быть проблемой во всех моих приложениях, я не уверен.

Редактировать: оно обновляется так, как должно быть в более высоких компонентах, поэтому это не такпроблема во всем приложении

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