Reactjs 从saga到react组件的返回值

Reactjs 从saga到react组件的返回值,reactjs,react-redux,redux-saga,Reactjs,React Redux,Redux Saga,我是新来的。仍然用redux商店和传奇故事等把我的头绕在所有的层上。 我试图将一个简单的布尔值从saga(此时saga正在正确返回)返回到react组件 以下是我所拥有的: 在容器组件上,我有以下内容: export interface IKpaPickerConnectedDispatch { lookupListDialogToggle?: (dialogProps: ILookupListDialog) => void; requestSaveProfileField

我是新来的。仍然用redux商店和传奇故事等把我的头绕在所有的层上。 我试图将一个简单的布尔值从saga(此时saga正在正确返回)返回到react组件

以下是我所拥有的:

在容器组件上,我有以下内容:

export interface IKpaPickerConnectedDispatch {
    lookupListDialogToggle?: (dialogProps: ILookupListDialog) => void;
    requestSaveProfileFieldItem?: (profieFieldItem: IProfileFieldItem) => void;
    // setKpiPercentageShow?: (value: boolean) => void;
    updateKpaKpiProfilePercentage?: (toggle: boolean, jobId: number) => void;
    getKpaKpiProfilePercentageToggle?: (jobId: number) => void;
}

function mapStateToProps(state: IGlobalApplicationState, ownProps: IKpaPickerProps): IKpaPickerConnectedState {
    return {
        kpiPercentageShow: actions.requestKpaKpiToggle(state.jobProfileState.jobProfile!.id)
    };
}
function* requestKpaKpiToggle(action: IKpaKpiToggleReceive)
{
    try {
        const  jobId = action.payload!;
        const REQUEST_URL = `${REMPROFILE_API_URL}/KpaKpi/GetKpaKpiJobProfilePercentageToggle/${jobId}`;
        const response = yield fetch(REQUEST_URL, secureHeader('GET'));
        const json = yield response.json();
        // new method to return value and update state
        yield put(requestKpaKpiToggleReceived(json));
    }
    catch (e) {
        yield put(logError(e));
    }
}
在传奇的一面,我有这样一句话:

export interface IKpaPickerConnectedDispatch {
    lookupListDialogToggle?: (dialogProps: ILookupListDialog) => void;
    requestSaveProfileFieldItem?: (profieFieldItem: IProfileFieldItem) => void;
    // setKpiPercentageShow?: (value: boolean) => void;
    updateKpaKpiProfilePercentage?: (toggle: boolean, jobId: number) => void;
    getKpaKpiProfilePercentageToggle?: (jobId: number) => void;
}

function mapStateToProps(state: IGlobalApplicationState, ownProps: IKpaPickerProps): IKpaPickerConnectedState {
    return {
        kpiPercentageShow: actions.requestKpaKpiToggle(state.jobProfileState.jobProfile!.id)
    };
}
function* requestKpaKpiToggle(action: IKpaKpiToggleReceive)
{
    try {
        const  jobId = action.payload!;
        const REQUEST_URL = `${REMPROFILE_API_URL}/KpaKpi/GetKpaKpiJobProfilePercentageToggle/${jobId}`;
        const response = yield fetch(REQUEST_URL, secureHeader('GET'));
        const json = yield response.json();
        // new method to return value and update state
        yield put(requestKpaKpiToggleReceived(json));
    }
    catch (e) {
        yield put(logError(e));
    }
}
我发现以下错误,不太明白原因:-( 类型“Action”不可分配给类型“boolean”

任何帮助都将不胜感激

更新

好的,在输入之后,我已经设法靠近了一步,但还没有到那一步

我在状态管理的减速器中添加了这个

case ActionKeys.KPA_KPI_TOGGLE_RECEIVE: {
    global.console.log('KPA_KPI_TOGGLE_RECEIVE', action.payload);
    return state.set('isKpiPercentageShown', action.payload)
                .set('kpiPercentageReceived', true) as JobProfileState;
}
现在的问题是它没有更新

componentDidMount()
{
    if(this.props.getKpaKpiProfilePercentageToggle && !this.state.kpiPercentageReceived)
        this.props.getKpaKpiProfilePercentageToggle(this.props.jobId);
}

当故事完成时,您应该使用布尔值执行另一个操作,这是相关的reducer捕获的操作

您可以有两个操作:

请求:由传奇处理(你已经这样做了)。 请求处理:由saga发送,由减速机处理

在你的传奇中:

收益put({type:requeest_HANDLED,result:true | false})

在减速器中:

已处理的案件请求: 返回{…状态,someFlag:someValue}

这是一个可以执行的示例,因为我不知道为什么要返回布尔值并返回response.json()

我经常在redux saga中使用的模式是由组件调度一个操作,该操作由saga处理。当saga完成时,它调度一个由reducer处理的操作,reducer会相应地更改存储中的状态,告诉组件任务完成了


此外,我通常有第三个动作,在发生错误时,由catch块中的saga使用,因此组件会得到通知,并可以向用户显示消息(或对错误采取任何其他适当的操作)。

当saga完成时,您应该用布尔值执行另一个动作,相关reducer会捕获该动作

您可以有两个操作:

请求:由传奇处理(你已经这样做了)。 请求处理:由saga发送,由减速机处理

在你的传奇中:

收益put({type:requeest_HANDLED,result:true | false})

在减速器中:

已处理的案件请求: 返回{…状态,someFlag:someValue}

这是一个可以执行的示例,因为我不知道为什么要返回布尔值并返回response.json()

我经常在redux saga中使用的模式是由组件调度一个操作,该操作由saga处理。当saga完成时,它调度一个由reducer处理的操作,reducer会相应地更改存储中的状态,告诉组件任务完成了


此外,我通常有第三个动作,在发生错误时,由catch块中的saga使用,因此组件会得到通知,并可以向用户显示消息(或对错误采取任何其他适当的动作)。

您的错误似乎来自以下行:

kpiPercentageShow: actions.requestKpaKpiToggle(state.jobProfileState.jobProfile!.id)
因为您已使用TypeScript在
IKpaPickerConnectedDispatch
的界面中将
KPiperContentageshow
标识为
bool


此外,您正试图直接从您的操作中获取值,这是不可能的。检查您的流时,
布尔值不应来自您的操作。在您使用reducer更新存储后,它应在
MapStateTrops
中提供给您。

您的错误似乎来自以下行:

kpiPercentageShow: actions.requestKpaKpiToggle(state.jobProfileState.jobProfile!.id)
因为您已使用TypeScript在
IKpaPickerConnectedDispatch
的界面中将
KPiperContentageshow
标识为
bool


此外,您正试图直接从您的操作中获取值,这是不可能的。检查您的流程,布尔值不应该来自您的操作。在您使用减速机更新存储后,它应该在
MapStateTrops
中提供给您。

您可以给我一个例子吗o什么?就像我说的,我还不明白所有的事情,所以我边走边学你的更新。我也更新了我的问题,如果你能帮忙的话,你能给我举个例子吗,或者给我指点什么吗?就像我说的,我还不明白所有的事情,所以我边走边学你的更新。我还更新了我的qu如果你能帮忙的话谢谢,我编辑了我的问题。希望你能帮我解决哪里出了问题?谢谢,我编辑了我的问题。希望你能帮我解决哪里出了问题?