All Downloads are FREE. Search and download functionalities are using the official Maven repository.

core.Redux.useDispatch.ts Maven / Gradle / Ivy

The newest version!
import { useCallback, useContext, useRef } from 'react'
import { useDispatch as useReduxDispatch } from 'react-redux'

import { ExpressionContext } from '../Expression/Context'

import { mergeMeta } from './utils/mergeMeta'

/**
 * Обёртка над dispatch, добавляющая контекст выполнения экспрешена в метаданные вызываемого action
 * Нужен для вызова action, которые тригерят саги, использующие резолв данных из модели
 * @returns {Function}
 */
export function useDispatch() {
    const dispatch = useReduxDispatch()
    const expressionContext = useContext(ExpressionContext)
    const contextRef = useRef(expressionContext)

    contextRef.current = expressionContext

    return useCallback(action => dispatch(mergeMeta(action, {
        evalContext: contextRef.current,
    })), [dispatch, contextRef])
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy