@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 внутри классовых компонентов.
@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 приложении.