📜  解释 Redux 中的 Action

📅  最后修改于: 2022-05-13 01:56:15.478000             🧑  作者: Mango

解释 Redux 中的 Action

在本文中,我们将学习 Redux 中的 Action。动作是包含信息的纯 JavaScript 对象。 Action 是 Redux 的构建块之一。

Redux是 JavaScript 应用程序中使用的状态管理库。它用于管理应用程序的数据和状态。

Redux 的使用:借助 redux,可以轻松管理状态和数据。随着我们应用程序的复杂性增加。一开始很难理解,但它确实有助于构建复杂的应用程序。一开始,感觉工作量很大,但确实很有帮助。

这是关于 redux 的简短介绍。现在,我们将讨论 Action 对象。

动作:动作是包含信息的 JavaScript 对象。操作是商店的唯一信息来源。它基本上将信息的有效负载从应用程序传送到商店。它只告诉我们发生了什么。动作有一个类型属性,它们必须包括在内,因为类型属性告诉我们要执行什么样的动作。动作还可以包含有效载荷(动作中的数据字段)来描述动作。

句法:

const Actions = {
 type: '',
 payload: ''
}

在语法中,Action 对象有两个属性。第一个属性是“类型属性”,它应该在字符串约束中定义,并且必须在对象中包含类型属性。第二个是“有效负载”,有效负载存储有关发生的事情的附加信息。在对象中包含“有效负载”并不是强制性的。这完全取决于您,但我们应该始终尝试仅将必要的信息传递给操作对象,并尽量使其保持轻便。

如上所述,动作是商店唯一的信息来源。现在,我们将讨论商店。

存储:存储是保存应用程序状态的对象。看,它包含需要传递给其他组件的组件的状态。存储使这种传递变得更加容易,因为我们不再需要在父组件内维护状态以便将其传递给其子组件。

与商店相关的功能:

createStore():此方法用于创建商店。下面是它的语法。

const store = createStore()

dispatch(action):要改变状态,我们需要调用 store.dispatch() 并传入一个 action 对象。下面是它的语法。

store.dispatch({ type: 'Action' })

getState():此方法用于获取商店的当前状态。基本上,在 dispatch action 之后,store 会运行它的 reducer函数(一个纯函数,它获取当前 state 和 action 并返回新的 state,并告诉 store 如何去做)。并将新值保存在其中。然后我们将调用 getState() 方法来检索应用程序的更新值。

动作创作者

动作创建者是创建动作的函数。所以动作是信息(对象),动作创建者是返回这些动作的函数。这些功能有助于实现可重用性。例如,待办事项列表将具有此操作创建者。

Javascript
// Creating Action creator
function AddToDo(task) {
  return { type: 'ADD_TASK', task: task }
}
  
// Dispatching 
store.dispatch(AddToDo('anything'));


Javascript
const boundToDoActions = bindActionCreators(
  {
    add: AddToDo,
    remove:RemoveToDo,
    clear:ClearToDos
  },
  store.dispatch
)


Javascript
import React from 'react';
import './index.css';
import { useSelector, useDispatch } from 'react-redux';
import { incNum, decNum } from './actions/index';
  
function App() {
  const mystate = useSelector((state) => state.change);
  const dispatch = useDispatch();
  return (
    <>
      

Increment/Decrement the number by 2, using Redux.

      
        

{mystate}

                        
       ); }    export default App;


index.js
export const incNum = () => {
    return { type: "INCREMENT" }
}
  
export const decNum = () => {
    return { type: "DECREMENT" }
}


func.js
const initialState = 0;
  
const change = (state = initialState, action) => {
  switch (action.type) {
    case 'INCREMENT':
      return state + 2;
    case 'DECREMENT':
      if (state == 0) {
        return state;
      }
      return state - 2;
    default:
      return state;
  }
};
  
export default change;


index.js
import change from './func'
import { combineReducers } from 'redux';
  
const rootReducer = combineReducers({
    change
});
  
export default rootReducer;


Javascript
import { createStore } from 'redux';
import rootReducer from './reducers/index';
  
const store = createStore(rootReducer,
    window.__REDUX_DEVTOOLS_EXTENSION__ &&
    window.__REDUX_DEVTOOLS_EXTENSION__());
  
export default store;


index.js
import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import { Provider } from 'react-redux';
import App from './App.jsx';
import store from './store';
  
ReactDOM.render(
  
    
  ,
  document.getElementById('root'),
);


但是如果我们有多个动作创建者,我们将如何绑定多个动作创建者来存储。对于那个 redux 有bindActionCreators() 方法。这是一个实用函数,它接受一个动作创建者或整个动作创建者对象,并将它们全部绑定到我们从商店获得的调度函数。例如,一个待办事项列表将有多个动作创建者。

Javascript

const boundToDoActions = bindActionCreators(
  {
    add: AddToDo,
    remove:RemoveToDo,
    clear:ClearToDos
  },
  store.dispatch
)

创建 React 应用程序和模块安装:

第 1 步:使用以下命令创建一个 React 应用程序:

npx create-react-app MyApp

第 2 步:创建项目文件夹(即 MyApp)后,使用以下命令移动到该文件夹:

cd MyApp

第 3 步:创建 ReactJS 应用程序后,使用以下命令安装reduxreact-redux

npm install redux react-redux

项目结构:它将如下所示:

GFG

示例:在此示例中,我们创建了两个按钮,一个将值递增 2,另一个将值递减 2,但如果值为 0,则它不会递减,我们只能递增它。使用 Redux,我们可以管理状态。

文件名:App.js

Javascript

import React from 'react';
import './index.css';
import { useSelector, useDispatch } from 'react-redux';
import { incNum, decNum } from './actions/index';
  
function App() {
  const mystate = useSelector((state) => state.change);
  const dispatch = useDispatch();
  return (
    <>
      

Increment/Decrement the number by 2, using Redux.

      
        

{mystate}

                        
       ); }    export default App;

文件名:index.js

index.js

export const incNum = () => {
    return { type: "INCREMENT" }
}
  
export const decNum = () => {
    return { type: "DECREMENT" }
}

文件名:src/reducers/func.js

函数.js

const initialState = 0;
  
const change = (state = initialState, action) => {
  switch (action.type) {
    case 'INCREMENT':
      return state + 2;
    case 'DECREMENT':
      if (state == 0) {
        return state;
      }
      return state - 2;
    default:
      return state;
  }
};
  
export default change;

文件名:src/reducer/index.js

index.js

import change from './func'
import { combineReducers } from 'redux';
  
const rootReducer = combineReducers({
    change
});
  
export default rootReducer;

文件名:Store.js

Javascript

import { createStore } from 'redux';
import rootReducer from './reducers/index';
  
const store = createStore(rootReducer,
    window.__REDUX_DEVTOOLS_EXTENSION__ &&
    window.__REDUX_DEVTOOLS_EXTENSION__());
  
export default store;

文件名:src/index.js

index.js

import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import { Provider } from 'react-redux';
import App from './App.jsx';
import store from './store';
  
ReactDOM.render(
  
    
  ,
  document.getElementById('root'),
);

运行应用程序的步骤:打开终端并键入以下命令。

npm start

输出:

参考: https://www.geeksforgeeks.org/introduction-to-react-redux/