Redux - вызов действия из функции

Я пытаюсь вызвать действие redux из функции. Компонент, из которого я вызываю функцию, уже подключен к магазину. Однако это не сработает, если я передам такое действие, как:

function myFunc(action) {
    action()
}

Есть ли способ передать действие через параметр? Спасибо.

Вам нужно отправить свою функцию в магазин redux. Поскольку это не полный код, трудно давать на его основе предложения. Если вы используете его в React.Component, используя функцию подключения "react-redux" с mapActionToProps, вы можете получить доступ к действию в реквизитах реакции.

johnson lai 20.10.2018 16:35
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
2
1
6 173
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

использование bindActionCreator из redux - самый простой способ диспетчеризации действий из компонента.

import { connect } from 'react-redux';
import { bindActionCreators } from 'redux';

class ReduxConnectedComponent extends React.Component {
 mainFunction = () =>{
  this.props.someAction(); // this dispatches your action.
  }
 render(){}
}
const mapStateToProps = store => ({
  test: store.modules.someObject,
});

const mapDispatchToProps = dispatch => bindActionCreators({
  someAction: yourActionCreatorFunction,
}, dispatch);
export default connect(maStateToProps,mapDispatchToProps)(ReduxConnectedComponent)

здесь, в mapDispatchToProps, мы используем bindActionCreator для привязки функции к reduxstoredispatch. так что всякий раз, когда вы это называете. он фактически отправляет действие магазина

Ответ принят как подходящий

Действие должно быть связано с диспетчером, чтобы редуктор его поймал и обновил хранилище.

Для этого вы должны включить свое действие в качестве аргумента mapDispatchToProps для функции подключения redux. Это выглядело бы так:

connect(null, { actionCreator })(MyComponent)

Чтобы передать создателя связанного действия функции из компонента, откройте его через props: myFunc(this.props.actionCreator)

Собираем все вместе:

import myFunc ...
class MyComponent extends React.Component {

  onChange() {
    myFunc(this.props.actionCreator)
  }

  render() { ... }
}

export connect(null, { actionCreator })(MyComponent)

Теперь, когда myFunc выполняет actionCreator(), он правильно отправляет действие, которое будет обнаружено вашим редуктором.

ОБНОВЛЕННЫЙ ПОДХОД 2021

Теперь вы можете использовать ловушку для отправки любого действия Сначала импортируйте useDispatch из react-redux, как показано ниже.

import { useDispatch } from 'react-redux';

Теперь внутри вашего функционального компонента создайте переменную, как показано ниже

const dispatch = useDispatch();

теперь отправляйте / вызывайте любое действие, подобное приведенному ниже, из любого места

dispatch(action());

Другие вопросы по теме