当我搜索任何数据Redux调用行动无限。它给我的权利也详细资料和调用未定义无限的时间。我该如何解决这个问题?
行动
export const SEARCH_PRO = (query) =>{
return {
type: SEARCH_PROS,
query,
}
}
减速器
export const productData = (state = { searchDatas: [] }, action) => {
switch (action.type) {
case SEARCH_PROS:
console.warn("PRODUCT_LIST condition ", action.searchProds)
return {searchDatas:[action.searchProds]}
default:
return state
}
}
** Saga **
function* searchProducts(data) {
let result = yield fetch(`products/searchpro?search=${data.query}`);
result = yield result.json();
console.warn("products action is called", result)
console.warn("products action is ", data.query)
yield put({type: SEARCH_PROS, searchProds:result.products.data})
}
export function* productSaga() {
yield takeEvery(SEARCH_PROS, searchProducts)
}
搜索组件
<input type="search" className="form-control" name="search" placeholder="Search your Products" onChange={(event) => dispatch(SEARCH_PRO(event.target.value))} />
1条答案
按热度按时间xj3cbfub1#
你的 Saga 故事有个无限循环!
问题是您将相同的操作类型
SEARCH_PROS
用于两个不同的操作:一个是传递query
以启动搜索 *,另一个是传递从API获取的searchProds
。productSaga
将执行类型为SEARCH_PROS
的所有操作--包括从searchProducts
函数内部调度的操作。必须将这两个操作更改为不同的类型。常见的模式是使用
SEARCH_PROS_PENDING
和SEARCH_PROS_FULFILLED
。我还建议使用redux-toolkit
createAsyncThunk
而不是redux-saga来完成这项任务,因为它更容易编写和理解。