在React-Hook中使用中间件

时间:2019-04-05 10:28:41

标签: reactjs react-native redux react-redux react-hooks

所以我在我的本机应用程序中使用redux进行状态管理。 我期待在我的应用程序中使用钩子。 我的商店有一个减速器的多个实例,因此将操作分派到单个减速器很难。

在这种情况下,挂钩似乎提供了一个真正整洁的解决方案。 我们正在使用中间件来捕获特定的动作并产生副作用。 我希望为钩子实现类似中间件的功能,其中分派给钩子的动作也可以在redux-中间件中捕获。

任何有关如何实现这种功能的建议将受到高度赞赏。

谢谢。

1 个答案:

答案 0 :(得分:0)

您曾经听说过或者尝试将redux-saga用于中间件的异步事情,例如数据获取,以及不纯净的事情,例如访问浏览器缓存,它更易于管理,执行效率更高,易于测试,并且能够更好地处理故障。

有关更完整的文档,请参见here

我给你一个简单的例子,说明使用redux saga作为副作用

import api from '../api/apidetailproduct'; //if using api import it
import {
    takeLatest, //Spawns a saga on each action dispatched to the Store that matches pattern
    select, //instructs the middleware to invoke the provided selector on the current Store's state
    call, //for calling api
    put //instructs the middleware to dispatch an action to the Store. 
} from 'redux-saga/effects';
import {
    REQUEST_PRODUCT, 
} from '../actions/constants';
import {
    responseProduct,
} from '../actions/product';

export function* detailEffect(){
    const {loginreducer} = yield select() //first select your reducer where you store
    try {
        const {data} = yield call(api, loginreducer.token )//calling the api and then send the variable
        yield put(responseProduct(data))//put the data
    } catch (error) {
        console.log("error", error);
    }
}

export const productsagas = [takeLatest(REQUEST_PRODUCT, detailEffect)]