When Using Redux Saga with React Get This Error .. Uncaught TypeError: getPosts is not a function

When Using Redux Saga with React Get This Error .. Uncaught TypeError: getPosts is not a function

正在尝试学习如何将 Redux Sagas 与 React 结合使用。举一个简单的例子,但它对我不起作用。

我的 App.js 文件中的代码:

const sagaMiddleware = createSagaMiddleWare();

const store = createStore(
  reducers,
  applyMiddleware(sagaMiddleware)
)

sagaMiddleware.run(rootSaga);

ReactDOM.render(<Provider store={store}><App /></Provider>, document.getElementById('root'));

动作创作者:

 export const getPosts = () => {
        return  {
           type: 'GET_POSTS'
        }
     };

减速器:

const combineReducers = (state= {}, action) => {
     switch (action.type) {
       case 'GET_POSTS':
         return { ...state, loading: true};
       default:
         return state;
        }
      }

   export default combineReducers;

我的 Button 组件,其中应调用 onClick 的操作

const ButtonContainer = (getPosts) => (
     <button onClick={() => getPosts()}>Get Posts</button>
)

const mapDispatchToProps = {
  getPosts: getPosts
}

export default connect(null, mapDispatchToProps)(ButtonContainer);

问题是我在页面加载时遇到此错误。

Uncaught TypeError: getPosts is not a function....

理解错误的意思,它正在获取对象而不是函数,但不确定我需要做什么才能使它工作。

谢谢!

您当前的代码实际上并未将 getPosts 操作分派给您的减速器。

将您的 mapDispatchToProps 更改为:

const mapDispatchToProps = dispatch => {
  getPosts: bindActionCreators(getPosts, dispatch)
}

您还需要:

import { bindActionCreators, Dispatch } from "redux"

还将您的 ButtonContainer 更改为:

const ButtonContainer = props => (
     <button onClick={() => props.getPosts()}>Get Posts</button>
)

可以在 this 好的文档中找到有关调度的更多信息。