代码之家  ›  专栏  ›  技术社区  ›  seulgibear

在减速器中设置值时,Prop未按预期更新

  •  3
  • seulgibear  · 技术社区  · 7 年前

    组成部分:

    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 回复  |  直到 5 年前
        1
  •  3
  •   Dacre Denny    7 年前

    代码不能按预期工作的原因是您正在调用 login() 行动创造者,而不是 方法返回的 mapDispatchToProps() (然后注入 props <ComponentName/>

    尝试通过添加 this.props 在你打电话给

    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/>
        }    
    }
    
    推荐文章