嗨,我是React的初学者,我有一个React项目。我该如何解决这个问题=> TypeError:arr [Symbol.iterator]不是函数
我想基于令牌实施登录操作
我的控制台也这样说:组件中发生了上述错误: 在登录中(由ConnectFunction创建) 在ConnectFunction中(由Context.Consumer创建) 在Route中(在Routing.js:24处) 在路由中(在App.js:13) 在App中(src / index.js:14) 在路由器中(由BrowserRouter创建) 在BrowserRouter中(位于src / index.js:13) 在提供程序中(位于src / index.js:12)
action.js
import axios from 'axios';
import {
REGISTER_SUCCESS,
REGISTER_FAILED,
LOGIN_SUCCESS,
LOGIN_FAILED
} from './types';
const LoginAction = (email, password) => async dispatch => {
const config = {
headers: {
'Content-type': 'application/json',
'Access-Control-Allow-Origin': '*'
}
};
const body = JSON.stringify({ email, password });
try {
const res = await axios.post('sample api', body,
config);
dispatch({
type: LOGIN_SUCCESS,
payload: res.data
});
console.log(res);
} catch (err) {
dispatch({
type: LOGIN_FAILED
});
}
};
登录组件:
import React from 'react';
import './Login.css';
import {
Container,
Col,
Card,
Row,
Form,
InputGroup,
Button
} from 'react-bootstrap';
import logo from '../../assets/image/logo&Text.png';
import bitcoinVector from '../../assets/image/bitcoinVector.png';
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
import { faUser, faUnlock } from '@fortawesome/free-solid-svg-icons';
import { cpus } from 'os';
import { Link } from 'react-router-dom';
import ThemeInput from '../../components/ThemeInput/ThemeInput';
import { connect } from 'react-redux';
import { LoginAction } from '../../actions/auth';
import Register from '../../screens/Register/Register';
const Login = ({ login }) => {
const [formData, setFormData] = {
email: '',
password: ''
};
const emailRegex = RegExp(
/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
);
const { email, password } = formData;
const handleSubmit = async event => {
event.preventDefault();
if (password.length > 0) {
login(email, password);
}
};
const handleChange = e => {
setFormData({ ...formData, [e.target.name]: e.target.value });
};
return (
<div id="loginContainer">
<Container className="h-100">
<Row className="h-100">
<Col xs={12} className="align-self-center">
<Card id="loginCard">
<img src={logo} id="logoImg" />
<Card.Body className="p-0">
<Row>
<Col md={6} id="imgBox">
<img src={bitcoinVector} id="bitconVector" />
</Col>
<Col md={6} id="formBox" className="align-self-center">
<h1>
Login to <span className="themeColor">Zillqa</span>
</h1>
<Row>
<Col xs={9}>
<p className="textGray">
Welcome Back, Please login to your account.
</p>
</Col>
<Col xs={10}>
<Form onSubmit={e => handleSubmit(e)}>
<ThemeInput
type="email"
placeholder="Email"
icon="user"
onChange={e => handleChange(e)}
/>
<ThemeInput
type="password"
placeholder="Password"
icon="lock"
onChange={e => handleChange(e)}
/>
<Form.Check label="Remember me" id="checkbox" />
<Row id="loginBoxFooter">
<Col xs={8}>
<span className="textGray">
Do you have any account?
</span>
<Link
to={Register}
className="themeColor textGray"
>
register
</Link>
</Col>
<Col xs="auto">
<Button className="themeBtn px-4">Login</Button>
</Col>
</Row>
</Form>
</Col>
</Row>
</Col>
</Row>
</Card.Body>
</Card>
</Col>
</Row>
</Container>
</div>
);
};
export default connect(
null,
{ login: LoginAction }
)(Login);
减速器:
import {
REGISTER_SUCCESS,
REGISTER_FAILED,
LOGIN_SUCCESS,
LOGIN_FAILED
} from '../actions/types';
const initialState = {
token: localStorage.getItem('token'),
isAuthenticated: null,
loading: true,
user: null
};
const AuthReducers = (state = initialState, action) => {
const { type, payload } = action;
switch (type) {
case LOGIN_SUCCESS:
case REGISTER_SUCCESS:
localStorage.setItem('token', payload.token);
return {
...state,
...payload,
isAuthenticated: true,
loading: false
};
case LOGIN_FAILED:
case REGISTER_FAILED:
localStorage.removeItem('token');
return {
...state,
token: null,
isAuthenticated: false,
loading: false
};
default:
return state;
}
};
export default AuthReducers;
类型:
export const REGISTER_SUCCESS = 'REGISTER_SUCCESS';
export const REGISTER_FAILED = 'REGISTER_FAILED';
export const SET_ALERT = 'SET_ALERTS';
export const REMOVE_ALERT = 'REMOVE_ALERTS';
export const USER_LOADED = 'USER_LOADED';
export const AUTH_ERROR = 'AUTH_ERROR';
export const LOGIN_SUCCESS = 'LOGIN_SUCCESS';
export const LOGIN_FAILED = 'LOGIN_FAILED';
答案 0 :(得分:0)
const [formData, setFormData] = {
email: '',
password: ''
};
这是问题所在。您正在尝试将对象分解为数组元素。
答案 1 :(得分:0)
在这里,我认为您做错了,您忘记添加useState。
代替:const [formData, setFormData] = { email: '', password: '' };
你应该有:
const [formData, setFormData] = useState({ email: '', password: '' });
。也不要忘记导入useState import React, {useState} from react
答案 2 :(得分:0)
您使用了错误的解构语法。另外,您没有使用useState
。从react导入它。
from import React, {useState} from react
useState将采用一个参数,这是该状态的默认值。在您的情况下,对象带有电子邮件和密码。
const [formData, setFormData] = useSatate({
email: '',
password: ''
});