reactjs React-Redux从API中搜索问题数据,

iswrvxsc  于 2023-01-04  发布在  React
关注(0)|答案(1)|浏览(126)

当我搜索任何数据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))} />
xj3cbfub

xj3cbfub1#

你的 Saga 故事有个无限循环!
问题是您将相同的操作类型SEARCH_PROS用于两个不同的操作:一个是传递query以启动搜索 *,另一个是传递从API获取的searchProds
productSaga将执行类型为SEARCH_PROS的所有操作--包括从searchProducts函数内部调度的操作。
必须将这两个操作更改为不同的类型。常见的模式是使用SEARCH_PROS_PENDINGSEARCH_PROS_FULFILLED
我还建议使用redux-toolkit createAsyncThunk而不是redux-saga来完成这项任务,因为它更容易编写和理解。

相关问题