Zane_chan 2018-12-24 12:56 采纳率: 0%
浏览 569

我在redux中添加了redux-thunk,在dispath中执行return一个action的函数还是报错

import {createStore,compose,applyMiddleware } from 'redux'
import thunk from 'redux-thunk'
import reducer from '../Reducer/index'

const composeEnhancers =
window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ ?
window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__({}) : compose;

const enhancer = composeEnhancers(
applyMiddleware(thunk)
);

const store = createStore(reducer, enhancer);
export default store;

这是store的配置 中间件使用了thunk

function mapdispatchtoprops(dispatch){
return{
setLoginState:dispatch(login(token))
}
}

export default connect(null,mapdispatchtoprops)(withRouter(Login));
这是component中的使用

const login = (token)=>{
return {
type:'login',token:token,loginStatus:true
}
}

const loginAction = (token) => dispatch =>{
if(Object.getOwnPropertyNames(token).length > 0 ){
dispatch(login(token))
}else{
return false;
}
}
export default {loginAction,login}

这是自定的action

在component在执行报错:
Uncaught TypeError: Object(...) is not a function

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-07 13:03
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    你在这个Redux应用中遇到了一些问题。首先,你需要确保你的组件和actions都在正确的文件中定义。

    在你的connect()函数中,你应该将mapDispatchToProps作为第二个参数传递给它,而不是null

    其次,当你尝试使用dispatch.login(token)时,你实际上是在尝试调用dispatch对象的方法,但dispatch是一个函数,不是对象。

    解决这个问题的最佳方法是:

    1. 在你的Component中创建一个新的dispatch实例,并将其传入mapDispatchToProps
    2. 使用dispatch.login(token)来调用新的dispatch实例。

    例如:

    const mapStateToProps = state => ({
      token: state.token,
    });
    
    const mapDispatchToProps = {
      dispatch,
    };
    
    const Login = withConnect(mapStateToProps, mapDispatchToProps)(props => (
      <div>
        {/* ... */}
      </div>
    ));
    

    然后,你可以像这样调用dispatch.login(token)

    dispatch.login(token);
    

    请注意,这只是一个基本的示例,实际的解决方案可能需要根据你的具体需求进行调整。

    评论

报告相同问题?