javascript - 将reducer从react redux转换为hook
问题描述
我正在制作一个登录/注册应用程序。我正在尝试将基于类的组件的减速器转换为与钩子一起使用。这是减速机:
import { SET_CURRENT_USER, USER_LOADING } from "../actions/types";
const isEmpty = require("is-empty");
const initialState = {
isAuthenticated: false,
user: {},
loading: false
};
export default function(state = initialState, action) {
switch (action.type) {
case SET_CURRENT_USER:
return {
...state,
isAuthenticated: !isEmpty(action.payload),
user: action.payload
};
case USER_LOADING:
return {
...state,
loading: true
};
default:
return state;
}
}
如何将其转换为减速器以用于钩子功能组件?
这是我的登录组件:
function Login (props) {
const [email, setEmail] = useState("");
const [password, setPassword] = useState("");
const [errors, setErrors] = useState([]);
useEffect(() => {
if (props.auth.isAuthenticated) {
props.history.push("/dashboard");
}
});
useEffect(() => {
if (props.auth.isAuthenticated) {
props.history.push("/dashboard");
}
}, [props.auth]);
const onSubmit = e => {
e.preventDefault();
const userData = {
email: email,
password: password
};
props.loginUser(userData);
};
form data....
解决方案
你可以使用useDispatch, useSelector
从react-redux
import { useDispatch, useSelector } from 'react-redux';
const dispatch = useDispatch();
const user = useSelector(getUser);
// you can pass your selector function to useSelector(state => state.user)
在useEffect
Hook 中,您可以使用它dispatch()
来调度您的操作
useEffect(() => {
dispatch(your action goes here);
},[])
推荐阅读
- express - 如何使用相同的路线,一条带参数,一条不带?
- html - 如何在没有背景“故障”的情况下添加 HTML 按钮?
- c# - 实体框架错误:已经有一个打开的 DataReader 与此命令关联
- tkinter - 我正在用 Python 创建一个 gui 程序,但作业没有运行
- azure - 用于对用户进行身份验证的 Azure 应用程序
- java - 在 java 中使用 aws lambda 将记录分批放入 kinesis firehose
- css - @keyframes 动画在 Safari(macOS、iOS)上不起作用
- flutter - Flutter 中的 Clean Architecture 在哪里执行状态更改?
- javascript - 使用 JS 或 jQuery 将类添加到文本行
- excel - 如何忽略数据透视表中特定字段的特定过滤器?