javascript - 使用 redux hooks 时使用 redux Action 的最佳选择是什么?

标签 javascript reactjs react-redux react-hooks

我想使用 redux hook useSelector 来访问商店并摆脱 connect(),所以我需要创建一种方法来导出我的操作,我正在考虑使用静态方法的类,这里是一个示例

export default class AuthActions {
    static async login(userData) {
        try {
            const user = await axios.post('http://localhost:5000', userData);

            dispatch({
                type: AUTH.LOGIN,
                payload: user.data
            })
        } catch (error) {
            dispatch({
                type: SET_ERROR,
                payload: error
            })
        }
    }

    static setUser() {
        console.log("SET USER")
    }

    static logout() {
        console.log("Logout")
    }
}

然后我使用如下操作方法:

import React from 'react';
import AuthActions from '../../redux/actions/AuthActions';
import { useSelector } from 'react-redux';


export default const Login = () => {
  //More logic....
  const { isAuth } = useSelector((state) => state.auth);

  const submitHandler = e => {
    e.preventDefault();
    AuthActions.login(userData)
  }

  return (
    <form onSubmit={submitHandler}>
      My Login form ....
    </form>
  );
};

但我想知道以这种方式使用 redux 是否存在缺点或性能问题,还是我应该避免使用类并使用简单的对象来代替?

提前致谢

最佳答案

这是我的 reducer 格式,灵感来自 ducks-modular-redux 例如,看看这个 darkMode reducer:

export const constants = {
  TOGGLE: "darkMode/TOGGLE"
};

export const actions = {
  toggleDarkMode: () => {
    return {
      type: constants.TOGGLE
    };
  }
};

export const thunks = {
  toggleDarkMode: () => {
    return (dispatch, getState) => {
      dispatch(actions.toggleDarkMode());
      const isDark = getState().darkMode.isDark;
      localStorage.setItem("isDark", isDark);
    };
  }
};

const initialState = { isDark: localStorage.getItem("isDark") === "true" };

export default (state = initialState, action) => {
  switch (action.type) {
    case constants.TOGGLE:
      return {
        isDark: !state.isDark
      };
    default:
      return state;
  }
};

关于javascript - 使用 redux hooks 时使用 redux Action 的最佳选择是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58865944/

相关文章:

reactjs - 如何在React Material UI简单输入中启用文件上传?

javascript - 如何正确处理 onclick 事件和 onblur

javascript - API 数据不会在生产中更新,但在本地工作

reactjs - 将参数传递给更新react-redux中存储的方法

javascript - 为什么 isomorphic-style-loader 会抛出 TypeError : Cannot read property 'apply' of undefined when being used in unison with CSS-Modules

javascript - 使用 material-ui 库 react 渲染问题

javascript - react native -有办法隐藏/显示另一个页面中的项目吗?

javascript - 通过递归检查均匀性(Eloquent javascript-exercise)

javascript - 如何在同一个 php 页面上显示和隐藏多个表单

javascript - Javascript 错误 : Unexpected token (