如果我在下面提出请求,一切正常:
var ofst = 0;
function* GettingJson(offset=ofst){
var url = `/api/publishbooks/skip=${offset}&limit=12&sort=publishDate&sortDir=desc&_=1501513343421`;
const res = yield request.get(url);
}
但是,当然,我希望 ofst 从商店中获取它的值,并且我有一个带有 mapStateToProps 函数的容器组件,它返回参数 - offset: state.OffsetReducer :
class BookListContainer extends Component{
componentWillMount(){
this.props.ajaxRequestTriggeredMethod();
}
render() {
return (
<div>
<BooksList DataInputParam={this.props.books} BtnClickHandler={this.props.buttonClickedMethod} />
</div>
);
}
}
const mapStateToProps = (state) => {
return{
books: state.BooksReducer,
offset: state.OffsetReducer
};
};
const mapDispatchToProps = (dispatch) => {
return {
buttonClickedMethod: () => dispatch({type: 'BUTTON_CLICKED'}),
ajaxRequestTriggeredMethod: () => dispatch({type: 'AJAX_REQUEST_TRIGGERED'})
};
};
const BookListContainerExported = connect(mapStateToProps, mapDispatchToProps)(BookListContainer);
所以,我想将 this.props.offset 分配给 of of :
var ofst = {this.props.offset};
但这可能不起作用,因为目前我的 GettingJson()生成器是在容器组件之外定义的。
问题№1:是否有必要仅在容器组件内定义ajax请求生成器才能访问 this.props.offset ?也许,还有其他一些方法吗?
问题№2:如果我在容器组件中定义 GettingJson()(作为其中一种方法),我应该如何调用它? 目前它是从redux-saga调用的,它工作正常:
const ApiCallSaga = function*(){
while(yield take('AJAX_REQUEST_TRIGGERED'))
try {
yield put({type:'AJAX_REQUEST_STARTED'});
const result = yield call(GettingJson);
yield put({type: 'AJAX_REQUEST_OK'});
}catch (error){
yield put({type: 'AJAX_REQUEST_ERROR'});
}
};
但是当GetJson()被定义为容器的方法时,上面给出的调用不能正常工作,我得到 AJAX_REQUEST_ERROR 。
答案 0 :(得分:0)
不应在容器/常规组件中定义Saga生成器。
如果您想在传奇中从商店获取值,请使用select
效果。
const offset = yield select((state) => state.offset);
const result = yield call(GettingJson);
如果您想从商店中没有的道具中获取值,请将其发送到动作有效负载中。