26. 如何对actionType进行拆分? - yiqunkeke/react-jianshu-shangguigu-zty GitHub Wiki
1.在store目录下,创建actionTypes.js
----- 在这个文件中统一管理action的type属性
// store/actionTypes.js
export const CHANGE_INPUT_VALUE = 'change_input_value'
export const ADD_TODO_ITEM = 'add_todo_item'
export const DELETE_TODO_ITEM = 'delete_todo_item'
2.在组件中使用actionTypes中的常量:
import store from './store'
import {CHANGE_INPUT_VALUE, ADD_TODO_ITEM, DELETE_TODO_ITEM } from './store/actionTypes' // 引入actionTypes中的常量
handleInputChange = (e) => {
const action = {
type: CHANGE_INPUT_VALUE, // 使用actionTypes中的常量替换掉之前的字符串
value: e.target.value
}
store.dispatch(action)
}
handleBtnClick = () => {
const action = {
type: ADD_TODO_ITEM // 使用actionTypes中的常量替换掉之前的字符串
}
store.dispatch(action)
}
handleDeleteItem = (index) => {
const action = {
type: DELETE_TODO_ITEM, // 使用actionTypes中的常量替换掉之前的字符串
index: index
}
}
3.在 reducer 中使用 actionTypes中的常量
import {CHANGE_INPUT_VALUE, ADD_TODO_ITEM, DELETE_TODO_ITEM } from './actionTypes' // 引入actionTypes中的常量
const defaultState = {
inputValue: '',
list: []
}
export default (state, action) => {
if(action.type === CHANGE_INPUT_VALUE) { // 使用actionTypes中的常量替换掉之前的字符串
// ...
}
if(action.type === ADD_TODO_ITEM) { // 使用actionTypes中的常量替换掉之前的字符串
// ...
}
if(action.type === DELETE_TODO_ITEM ) { // 使用actionTypes中的常量替换掉之前的字符串
// ...
}
return state
}
拆分actionTypes的意义是什么?
之前我们说,假设不拆分actionTypes时,如果不小心将action的type值拼写错误,找错是很困难的。
但是如果我们将action的type中的字符串,都抽离出去,定义成常量。那么在组件或者reducer中,如果再出现action中的type属性值拼写错误时,界面上会直接报错。
src\store\reducer.js
Line 11:24: 'CHANGE_INPvT_VALUE' is not defined
这就是为什么我们要把字符串提取出来定义成变量或者常量的原因。
如果常量或者变量书写错误时,会迅速的报出异常,可以迅速的定位到问题。但是如果是一个字符串拼写错误,它是不会报出异常的。