Привет всем, я хочу использовать с AUTH HO C, чтобы решить, следует ли отображать homePage как панель инструментов или как гостевую HomePage. Далее я хочу использовать эту логику c с другими компонентами. Но я застреваю с ошибкой всякий раз, когда я пытаюсь подключить свой ho c, используя состояние карты для поддержки, он возвращает
TypeError: Object (...) не является функцией
img: -
. Я видел другие подобные решения stackOverflow , но ни одно из них не могло очистить мою ошибку.
Я пытался использовать compose, но даже это не сработало. Если я удалить соединение это работает как шарм. Но мне нужно было бы избыточное состояние в моем ho c. Кроме того, я подумал об использовании хуков React-Redux, но сейчас я просто хочу упростить процесс.
Main. js
// this file is responsible for handling routes logic
import React, {useEffect} from 'react'
import {connect} from 'react-redux'
import {Switch , withRouter, Route,useLocation} from 'react-router-dom'
import Home from '../components/Home'
import Auth from '../components/Auth'
import authUser from '../stores/action/auth'
import {clearError} from '../stores/action/error'
import WithAuth from '../hocs/withAuth'
function Main(props){
let location=useLocation();
let clearError=props.clearError
let {error,currentUser}={props}
useEffect(()=>{
},[location.pathname,currentUser])
const NewComponent=WithAuth(Home);
return(
<Switch>
<Route exact path="/" >
<NewComponent />
</Route>
<Route exact path="/signUp">
<Auth heading={"Welcome to warbler"} isAuthenticated={props.currentUser.isAuthenticated} error={props.error} signUp={true} buttonText="Sign Up" />
</Route>
<Route exact path="/login">
<Auth authUser={props.authUser} isAuthenticated={props.currentUser.isAuthenticated} error={props.error} signUp={false} heading={"Welcome Back :)"} buttonText="Log In" />
</Route>
</Switch>
)
}
function mapStateToProps(state){
return (
{
...state
}
)
}
export default withRouter(connect(mapStateToProps,{authUser,clearError})(Main))
WithAuth. js
import React , {Component} from 'react'
import {connect} from 'react-redux'
function WithAuth(Comp){
return class extends React.Component{
render(){
if(this.props.isAuthenticated){
return (<div>Sucess!</div>)
}
else{
return (
<Comp {...this.props} />
)
}
}
}
}
function mapStateToProps(state){
return({
isAuthenticated:state.currentUser.isAuthenticated
}
)
}
export default connect(mapStateToProps,null)(WithAuth)