Опора не обновляется, как ожидается, когда значение установлено в редукторе - PullRequest
0 голосов
/ 14 ноября 2018

Я столкнулся с этой проблемой, когда тестировал только что созданное действие и редуктор. Пропорция не обновляется, хотя я устанавливаю ее в своем редукторе на фиксированное значение. Вот коды, которые я сделал в своем тестировании.

Компонент:

class <ComponentName> extends Component {

    componentDidMount() {
        login()
    }

    render() {
        if(this.props.isLogged) 
            return (
                <App/>    
            );
        else 
            return (
                <ErrorScreen/>
            );
    }    
}



function mapStateToProps(state) {
    return {
      isLogged:state.auth.isLogged
    }
}


const mapDispatchToProps = (dispatch) => {
    return {
        login: () => dispatch(login())
    };
};


export default connect(mapStateToProps,mapDispatchToProps)(<ComponentName>)

Действие:

export function login() {
    return {
        type:"TEST"
    }
}

Разбавление:

const initState = {
    isLogged: false,

}

export default (state=initState, action) => {
    switch(action.type) {
        case "TEST":
            return {
                ...state,
                isLogged: true
            }
            break;
    default:
        return state     
    }
} 

Комбинированный редуктор:

import {combineReducers} from 'redux'
import AuthenticationReducer from './authenticationReducer'

export default combineReducers({
    auth: AuthenticationReducer
})

Поставщик:

import React, {Component} from "react";
import <ComponentName> from './app/screens/<ComponentName>'
import store from './app/store'
import {Provider} from 'react-redux'

export default () =>
<Provider store={store}>
  <<ComponentName>/>
</Provider>;

Уже несколько часов пытаюсь отладить это. Я совершенно не понимаю, почему это происходит. Может я неправильно это реализовал? Я не знаю больше. Если есть какие-то файлы, которые я забыл включить, пожалуйста, сообщите мне. Спасибо и хорошего дня!

1 Ответ

0 голосов
/ 14 ноября 2018

Причина, по которой ваш код не работает должным образом, заключается в том, что вы вызываете создатель действия login(), а не метод login(), который возвращается из mapDispatchToProps() (и вводится в props из <ComponentName/>).

Попробуйте изменить код, добавив this.props перед вашим вызовом к login(), например:

class <ComponentName> extends Component {

    componentDidMount() {

        // Update this line here so that the login() method 
        // injected by connect() is called (ie via this.props)
        this.props.login()
    }

    render() {
        if(this.props.isLogged) 
            return <App/>
        else 
            return <ErrorScreen/>
    }    
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...