鍍金池/ 問答/HTML/ react-redux @connect()寫法和connect()(App)有

react-redux @connect()寫法和connect()(App)有什么區(qū)別?

react-redux里@connect為什么可以直接拿到對象里的屬性,而connect(mapStateToProps, mapDispatchToProps)(App)必須要手動(dòng)才能拿到對象里的屬性?比如:

const initialState = {
    isAuth: false,
    username: 'ok'
}

export function auth(state=initialState, action){
    ...
}

@connect(
    state => state.auth
)

class App extends Component{
    render(){
        return(
            {this.props.isAuth ? '<button></button>' : ''}
            ...
        )
    }
}

在這里使用裝飾器的寫法,可以直接拿到isAuth.

但是改成mapStateToProps要拿到isAuth就必須換成這種寫法:

const mapStateToProps = state => {
    return{
        isAuth: state.auth.isAuth
    }
}

下面這種寫法拿不到isAuth,

const mapStateToProps = state => {
    return{
        auth: state.auth
    }
}
在組件中加上this.props.auth.isAuth才能對isAuth進(jìn)行判斷

問題是@connect對auth這個(gè)對象做了什么,讓我們不用寫isAuth: state.auth.isAuth就可以拿到isAuth?

回答
編輯回答
淡墨
@connect(
    state => state.auth
)

@connect接受一個(gè)函數(shù)作為參數(shù),將這個(gè)函數(shù)的返回值對象展開傳給組件,即作為組件的props

2018年7月28日 07:05