Javascript 简单登录身份验证与Redux反应
我不确定我遗漏了什么,但我有一个简单的登录页面来验证用户 这是我处理登录的Javascript 简单登录身份验证与Redux反应,javascript,reactjs,redux,react-redux,Javascript,Reactjs,Redux,React Redux,我不确定我遗漏了什么,但我有一个简单的登录页面来验证用户 这是我处理登录的LoginPage.js函数 import { connect } from "react-redux"; import { loginUser } from "../actions/auth"; ... << Class declarations >> ... handleLogin = e => { e.preventDefa
LoginPage.js
函数
import { connect } from "react-redux";
import { loginUser } from "../actions/auth";
...
<< Class declarations >>
...
handleLogin = e => {
e.preventDefault();
const creds = {
username: e.target.username.value,
password: e.target.password.value
};
console.log("Login data sent ", creds);
loginUser(creds);
};
...
<< Login Component rendered and form to handleLogin >>
...
export default connect(
undefined,
{ loginUser }
)(Login);
我已将控制台日志放入以查看它的去向,但我只得到:
登录数据已发送{用户名:“测试”,密码:“测试”}
登录用户creds{用户名:“测试”,密码:“测试”}
它似乎没有走得更远,所以我在调度中没有看到任何东西
编辑:我补充说,我实际上已经在
LoginPage.js
中使用了connect
,您的逻辑有问题,我想您需要post请求,如果您得到正确的响应,然后发送。函数中返回了一个函数。这样做没有任何意义。只要执行它
export const loginUser = creds => {
console.log("login user creds ", creds);
return dispatch => {
console.log("inside dispatch ", creds);
try {
let response = API.post("api/login", {
username: "eve.holt@reqres.in",
password: "cityslicka"
});
console.log("Returned Data ", response);
dispatch(receiveLogin(creds));
return response;
} catch (e) {
console.log("Axios request failed ", e);
return false;
}
};
};
使用分派函数作为参数是可以的。为了让您的登录功能正常工作,我们需要进行几次更新 您可能已经对
React-Redux
流有点熟悉了
dispatcher
函数(我们导入并插入connect()的函数)来处理事件,将
用户输入以制定对后端API的请求(redux thunk动作创建者)logiuser()
操作创建者没有隐式访问dispatch
方法。您需要从道具中调用它:
handleLogin = e => {
e.preventDefault();
const creds = {
username: e.target.username.value,
password: e.target.password.value
};
console.log("Login data sent ", creds);
this.props.loginUser(creds);
};
this.props.login用户
通过connect()
绑定了dispatch
,在导入时直接调用它不会产生任何redux功能。这应该足以完成1和2
接下来我们需要解决第3个问题。此时,您应该能够执行dispatch
函数中的逻辑。但是,逻辑是不同步的(即,执行流是不受控制的),它不会等待API返回某些内容后再继续
您可以为承诺处理引入async/await
。在坚果壳中,它意味着在前进之前等待某件事情完成。请注意,这只适用于承诺
对于第4项,我必须让您决定如何将该数据传递给您的reducer:)
loginUser(creds)代码>返回一个函数,而您没有调用该函数。您需要类似于loginUser(creds)(调度)的东西我猜是吧?不是redux专家。你在使用redux thunk或其他redux中间件吗?@Christophengo是的,我在使用redux thunk-对所有这些仍然很陌生,所以不知道如何使用它exactly@Justin下面是我的解决方案:)太棒了!这确实有助于消除从Page=>Action连接不同部分时的一些困惑。。。现在来做减速机:)@Justin真棒!我很高兴这对你有帮助,把它写出来也让我有了更好的理解:)
export const loginUser = creds => {
console.log("login user creds ", creds);
return async (dispatch) => {
console.log("inside dispatch ", creds);
try {
let response = await API.post("api/login", {
username: "eve.holt@reqres.in",
password: "cityslicka"
});
console.log("Returned Data ", response);
dispatch(receiveLogin(creds));
return response;
} catch (e) {
console.log("Axios request failed ", e);
return false;
}
};
};