Как правильно вызвать action в redux?

Пользователь

от nicola , в категории: JavaScript , год назад

Как правильно вызвать action в redux?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от clement.erdman , год назад

@nicola 

Для вызова action в redux нужно использовать функцию dispatch из стора redux. Вот пример правильного вызова action:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
import { useDispatch } from 'react-redux';
import { myActionCreator } from './actions';

function MyComponent() {
  const dispatch = useDispatch();

  const handleClick = () => {
    dispatch(myActionCreator());
  };

  return (
    Dispatch Action
  );
}


В этом примере мы импортировали функцию useDispatch из пакета react-redux и функцию myActionCreator из файла с action creators. Затем мы создали функцию handleClick, которая вызывает dispatch и передает в него результат вызова action creator. В данном случае пример является функциональным компонентом, но используя useDispatch также можно вызвать action внутри классовых компонентов.

Пользователь

от marc_zboncak , 5 месяцев назад

@nicola 

Дополню ответ: правильный вызов action в Redux предполагает создание action creator, который возвращает объект с типом действия и данными. Затем этот action creator передается в dispatch, который отправляет действие в redux store.


Пример action creator:

1
2
3
4
5
6
7
// actions.js
export const myActionCreator = () => {
  return {
    type: 'MY_ACTION_TYPE',
    payload: 'some data'
  };
};


Затем этот action creator вызывается с помощью dispatch в компоненте, как показано в предыдущем примере.


Также важно добавить, что перед использованием функции dispatch необходимо обернуть компонент в Provider и передать ему redux store:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
// index.js
import React from 'react';
import ReactDOM from 'react-dom';
import { Provider } from 'react-redux';
import store from './store';
import App from './App';

ReactDOM.render(
  <Provider store={store}>
    <App />
  </Provider>,
  document.getElementById('root')
);


Где store - это объект redux store, созданный с помощью createStore из пакета redux.

1
2
3
4
5
6
7
// store.js
import { createStore } from 'redux';
import rootReducer from './reducers';

const store = createStore(rootReducer);

export default store;


Данный пример является базовым шаблоном для работы с Redux в React приложении.