【发布时间】:2018-08-04 21:03:09
【问题描述】:
我将 React 与 Redux Saga 一起使用。当我尝试使用 this.props.dispatch({type: CreateActionType.CREATE_ASYNC}); 在我的组件中执行传奇效果时什么都没有发生,它没有被执行。
当我在 index.js 中 console.log this.props.data 时,它是空的
如果此处缺少必要信息,请告诉我。
api.js
export const create = (params) => {
const dataList = {
data: {data1: 1, data2: 2,},
statusCode: 200,
}
return dataList;
};
sagas.js
import { put, call, takeEvery , all } from 'redux-saga/effects'
import { create } from '../api';
import * as CreateActionType from './constants';
export function* createAsync(action) {
const result = yield call(create, action.params);
const statusCode = result.statusCode;
if (statusCode === 200) {
yield [
put({ type: CreateActionType.CREATE_SUCCESS, params: result.data }),
];
} else {
console.warn("createAsync error", result.data);
}
};
function* WatchCreate() {
yield [
takeEvery(CreateActionType.CREATE_ASYNC, createAsync),
]
}
export default function* rootSaga() {
yield all([
WatchCreate(),
])
}
store.js
import * as CreateActionType from './constants';
import { combineReducers } from 'redux';
const defaultState = {
data: null,
}
function CreateStore(state = defaultState, action) {
switch (action.type) {
case CreateActionType.CREATE_SUCCESS:
return {
...state,
createStatus: true,
};
default:
return state;
}
};
const rootReducer = combineReducers({
CreateStore,
})
export default rootReducer;
index.js
import React, { Component } from 'react';
import { connect } from 'react-redux';
import * as CreateActionType from './constants';
class CreateNote extends Component {
constructor(props){
super(props);
this.state = {};
};
componentDidMount() {
this.props.dispatch({
type: CreateActionType.CREATE_ASYNC,
});
};
render() {
return <p>{this.props.data}</p>;
}
}
const mapStateToProps = (state) => {
return state.CreateStore;
};
export default connect(mapStateToProps)(CreateNote);
configstore.js
import { createStore, applyMiddleware } from 'redux';
import createSagaMiddleware from 'redux-saga';
import rootSaga from './container/sagas';
import rootReducer from './container/stores';
export default function ConfigureStore() {
const sagaMiddleware = createSagaMiddleware();
const store = createStore(rootReducer,
applyMiddleware(sagaMiddleware)
);
sagaMiddleware.run(rootSaga);
return store;
}
【问题讨论】:
-
创建代码sn-p并分享,你会得到更多反馈
-
这是基本的 redux 传奇
-
你应该调试它。如果控制台中没有错误消息,请添加一些 console.log 调用以查看执行与否。
-
您越容易为他人提供帮助,就越有可能帮助您。
标签: javascript reactjs react-native redux frontend