我的通用反应应用程序在运行saga时遇到一些问题。我正在服务器上渲染反应。我的react组件之一执行了应该由服务器上的saga侦听器捕获的redux操作。
这里是抽象示例
// *Header.js*
class Header extends React.PureComponent {
componentWillMount() {
this.props.doAction()
}
....
}
export default connect(null, {doAction})(Header)
// *actions.js*
function doAction() {
return {
type: "action"
}
}
// *saga.js*
function* doAsyncAction(action) {
console.log(action);
}
function* watchAction() {
yield takeEvery("action", doAsyncAction);
}
export default [
watchAction(),
];
// *sagas.js* --> root saga
import 'regenerator-runtime/runtime';
import saga from './saga';
import anotherSaga from './anotherSaga'
export default function* rootSaga() {
yield all([].concat(saga).concat(anotherSaga));
}
// *configureStore.js*
const sagaMiddleware = createSagaMiddleware();
const middleware = applyMiddleware(sagaMiddleware);
...
sagaMiddleware.run(require('./sagas').default);
在首次运行节点进程之后-它运行并给我控制台日志,但是 当我只是刷新浏览器并且函数doAsyncAction从未执行
请帮助,我在做什么错了?
答案 0 :(得分:0)
您需要更改此内容
function doAction() {
return {
type: "action"
}
}
对此:
const mapDispatchtoProps = (dispatch) => {
return {
doAction: () => dispatch({type: "action"})
}
}
export default connect(null, mapDispatchtoProps)(Header)
以下针对传奇中间件的Client.js设置:
const sagaMiddleware = createSagaMiddleware()
const createStoreWithMiddleware = applyMiddleware(sagaMiddleware)(createStore)
let store = createStoreWithMiddleware(rootReducers)
sagaMiddleware.run(rootSaga)
以上是在您实施商店的任何地方实施的。