简体   繁体   English

使用 redux 挂钩时,使用 redux 动作的最佳选择是什么?

[英]What is the best option to use redux actions when using redux hooks?

I want to use redux hook useSelector to access the store and get rid of connect(), so I need to create a way to export my actions, and I'm thinking on a class with static methods, here is an example我想使用 redux 钩子 useSelector 来访问商店并摆脱 connect(),所以我需要创建一种导出操作的方法,我正在考虑使用 ZA81259CEF8E959C624DF1D456E5 方法的 class,这里是一个示例

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")
    }
}

And then I use the action methods as follows:然后我使用如下操作方法:

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>
  );
};

But I'm wondering if there is a disadvantage or performance issues to use redux in this way, or should I avoid the usage of a class and use a simple object instead?但我想知道以这种方式使用 redux 是否存在劣势或性能问题,还是应该避免使用 class 而使用简单的 object 代替?

Thank you in advance先感谢您

this is my format of a reducer, inspired by ducks-modular-redux for example, check out this darkMode reducer:这是我的减速器格式,例如受鸭子模块化redux的启发,请查看这个darkMode减速器:

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;
  }
};

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM